模仿iPhone滑动开机动画

思路是:在view的layer层添加一个CAGradientLayer,同时添加一个mask,为CAgradientLayer添加CABasicAnimation,就是白色滑动的动画

1.创建继承UIView子类: AnimatedMaskLabel

添加属性

var gradientLayer = CAGradientLayer()
    let text: String = "Slide to see"
    let textAttributes: [String:AnyObject] = {
            let style = NSMutableParagraphStyle()
        style.alignment = .Center
        
        return [
            NSFontAttributeName: UIFont(name:"HelveticaNeue-Thin",size:25)!,
            NSParagraphStyleAttributeName:style
        ]
        }()

  2.设置gradientLayer属性:颜色,及相应的位置

func configureGradientLayer(){
        gradientLayer.startPoint = CGPointMake(0.0, 0.5)
        gradientLayer.endPoint = CGPointMake(1.0, 0.5)
        let colors = [
                    UIColor.blackColor().CGColor,
                    UIColor.whiteColor().CGColor,
                    UIColor.blackColor().CGColor
                ]
        gradientLayer.colors = colors
        
        let locations = [
                    0.25,0.5,0.75
                    ]
        gradientLayer.locations = locations
        
        
       
        
        
    }

  设置frame:

override func layoutSubviews() {
        gradientLayer.frame = CGRectMake(-bounds.size.width, bounds.origin.y, 3 * bounds.size.width, bounds.size.height)
    }

  3.添加Slide to see文字

func addText(){
        UIGraphicsBeginImageContextWithOptions(frame.size, false, 0)
        text.drawInRect(bounds,withAttributes:textAttributes)
        let image = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()
        
        let maskLayer = CALayer()
        maskLayer.backgroundColor = UIColor.clearColor().CGColor
        maskLayer.frame = CGRectOffset(bounds, bounds.size.width, 0)
        maskLayer.contents = image.CGImage
        gradientLayer.mask = maskLayer
    
    }

  init的时候调用

override init(frame:CGRect){
        super.init(frame: frame)
        self.configureGradientLayer()
        self.addText()
    }

  4.最主要的动画效果:basicAnimation

  

override func didMoveToWindow() {
        
         layer.addSublayer(gradientLayer)
        let gradientAnimation = CABasicAnimation(keyPath: "locations")
        gradientAnimation.fromValue = [0.0,0.0,0.25]
        gradientAnimation.toValue = [0.75,1.0,1.0]
        gradientAnimation.duration = 3.0
        gradientAnimation.repeatCount = Float.infinity
        gradientLayer.addAnimation(gradientAnimation, forKey: nil)
    }

5.添加到UIViewController的view上

override func viewDidLoad() {
        super.viewDidLoad()
        let animatedLabel = AnimatedMaskLabel(frame: CGRectMake(0, 100, view.frame.size.width, 30));
        animatedLabel.backgroundColor = UIColor.grayColor()
        view.addSubview(animatedLabel)
    }

  

  效果.颜色不是很对应,可以适当调整

 

转载于:https://www.cnblogs.com/luohome-ios/p/5084679.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值