动画/绘画

mac2022-06-30  22

简易动画:

iview.animationImages = {

                var images: [UIImage] = []

                for i in 0...40 {

                    if let image = UIImage(named: "") {

                        images.append(image)

                    }

                }

                return images

            } ()

animationImageView.animationDuration = 0.5;//设置动画时间

animationImageView.animationRepeatCount = 0;//设置动画次数 0 表示无限

[animationImageView startAnimating];//开始播放动画

该方法只有stop没有暂停功能,不适用于多个image;

多image实现方式:

    let myAnimatedTimer = NSTimer.scheduledTimerWithTimeInterval(0.04, target: self, selector: "setNextImage", userInfo: nil, repeats: true)

    func setNextImage() {

        iview.image = UIImage(named: "image\(nextImage).png")

    }

 

 

简易放大缩小动画:

targetAnimation = CABasicAnimation(keyPath: "transform.scale")                    targetAnimation?.duration = 1.0                    targetAnimation?.repeatCount = Float.infinity           //不停重复                    targetAnimation?.autoreverses = true                    targetAnimation?.fromValue = NSNumber(float: 1.0)                    targetAnimation?.toValue = NSNumber(float: 1.2)                    targetL?.layer.addAnimation(targetAnimation!, forKey: "scale-layer")

  //暂停layer上的动画    func pauseLayer(layer: CALayer) {        //Absolute Time(绝对时间)的概念,可以通过CACurrentMediaTime()获得        let pausedTime = layer.convertTime(CACurrentMediaTime(), fromLayer: nil)   //图层当前的时间        layer.speed = 0.0        //当前对象的时间流相对于父级对象时间流的流逝速度        //timeOffset则是active local time的偏移量.将一个动画看作一个环,timeOffset改变的其实是动画在环内的起点        layer.timeOffset = pausedTime    }    //继续layer上的动画    func resumeLayer(layer: CALayer) {        let pausedTime = layer.timeOffset        layer.speed = 1.0        layer.timeOffset = 0.0        layer.beginTime = 0.0        let timeSincePause = layer.convertTime(CACurrentMediaTime(), fromLayer: nil) - pausedTime        layer.beginTime = timeSincePause    }

截取scrollView上的区域

static func captureScrollView(scrollV: UIScrollView, atFrame: CGRect? = nil) -> UIImage{        var shareImg = UIImage()        let savedFrame = scrollV.frame        scrollV.frame.size.height = atFrame?.height ?? 0        UIGraphicsBeginImageContextWithOptions(scrollV.frame.size, false, UIScreen.mainScreen().scale)        scrollV.setContentOffset(CGPointZero, animated: false)        let context: CGContextRef = UIGraphicsGetCurrentContext()!        let savedContentOffset = scrollV.contentOffset        if atFrame != nil {            CGContextSaveGState(context)            UIRectClip(atFrame!)        }        scrollV.layer.renderInContext(context)         //将当前layer的呈现拷贝到context上        let img = UIGraphicsGetImageFromCurrentImageContext()        if img != nil {            shareImg = img        }        scrollV.setContentOffset(savedContentOffset, animated: false)        scrollV.frame = savedFrame        UIGraphicsEndImageContext()        return shareImg    }

 

环形进度条:

class HoopVateView: UIView {        struct Constant {        //进度条宽度        static let lineWidth: CGFloat = 6        //进度条颜色        static let progressColoar = HistoryTool.HistoryBottomLightColor    }        //进度条    let progressLayer = CAShapeLayer()    //进度条路径(整个圆圈)    let path = UIBezierPath()        //当前进度    @IBInspectable var progress: Double = 0 {        didSet {            if progress > 100 {                progress = 100            }else if progress < 0 {                progress = 0            }        }    }        required init?(coder aDecoder: NSCoder) {        super.init(coder: aDecoder)    }        override init(frame: CGRect) {        super.init(frame: frame)        self.backgroundColor = CC.transparent    }       //进度槽    let trackLayer = CAShapeLayer()        override func drawRect(rect: CGRect) {        //获取整个进度条圆圈路径        path.addArcWithCenter(CGPointMake(CGRectGetMidX(bounds), CGRectGetMidY(bounds)),                              radius: bounds.size.width/2 - Constant.lineWidth / 2,                              startAngle: angleToRadian(-90), endAngle: angleToRadian(270), clockwise: true)                //绘制进度条        progressLayer.frame = bounds        progressLayer.fillColor = UIColor.clearColor().CGColor        progressLayer.strokeColor = Constant.progressColoar.CGColor        progressLayer.lineWidth = Constant.lineWidth

        progressLayer.lineCap = kCALineCapRound;                //起点样式        progressLayer.lineJoin = kCALineJoinRound;              //终点样式        progressLayer.path = path.CGPath        progressLayer.strokeStart = 0        print(progress)        progressLayer.strokeEnd = CGFloat(progress)        layer.addSublayer(progressLayer)    }        //设置进度(可以设置是否播放动画)    func setProgress(pro: Double,animated anim: Bool) {//        setProgress(pro, animated: anim, withDuration: 0.55)        progress = pro        progressLayer.strokeEnd = CGFloat(progress)/100.0    }}

转载于:https://www.cnblogs.com/hazhede/p/5775739.html

最新回复(0)