iOS Core Animation详解(四)AutoLayout中的动画

原创blog,转载请注明出处

blog.csdn.net/hello_hwc

欢迎关注我的iOS SDK详解专栏

http://blog.csdn.net/column/details/huangwenchen-ios-sdk.html


前言:AutoLayout定义了View的位置,也就是说,在Auto Layout的工程里,如果不修改约束本身,在视图重新绘制的时候,还会回到最开始的位置。AutoLayout中的动画与视图的位置和大小有关。


先看看效果


实现过程

在Storyboard上拖拽一个UIImageview。设置约束为:水平垂直正中心,大小很定100*100

拖拽Imageview以及Constraint为Outlet

注意拖拽Y相关的约束,也就是这个

对应代码

 @IBOutlet weak var imageview: UIImageView!
 @IBOutlet weak var yConstraints: NSLayoutConstraint!

在viewDidload中设置imageview的初始状态

 yConstraints.constant = yConstraints.constant - CGRectGetHeight(UIScreen.mainScreen().bounds)/2
 self.imageview.alpha = 0.0;
 self.imageview.transform = CGAffineTransformMakeScale(0.1, 0.1)
 self.view.layoutIfNeeded();

ViewWillAppear中创建动画

 yConstraints.constant = yConstraints.constant + CGRectGetHeight(UIScreen.mainScreen().bounds)/2
 UIView.animateWithDuration(1.0, animations: { () -> Void in
        self.imageview.alpha = 1.0
        self.imageview.transform = CGAffineTransformIdentity
        self.view.layoutIfNeeded()
 })

原理

原理比较简单,就是利用修改约束NSLayoutConstraint中的属性constant,然后调用layoutIfNeeded来实现动画。注意,属性multiplier目前(iOS 8.4)还是只读的,不能修改。但是可以通过关系view1.property = view2.property * multiplier + constant进行转换。


纯代码的AutoLayout动画

上述动画用纯代码实现

class ViewController: UIViewController {

    var imageview:UIImageView?
    weak var yConstraint:NSLayoutConstraint?

    override func viewDidLoad() {
        super.viewDidLoad()
        //添加Imageview
        let image = UIImage(named: "1_hello_hwc.jpg")
        imageview = UIImageView(image: image)
        self.imageview?.setTranslatesAutoresizingMaskIntoConstraints(false)
        self.view.addSubview(self.imageview!)

        //创建约束,定义最开始的位置

        let hC = NSLayoutConstraint(item:self.view, attribute:NSLayoutAttribute.CenterX, relatedBy: NSLayoutRelation.Equal, toItem: self.imageview, attribute: NSLayoutAttribute.CenterX, multiplier: 1.0, constant: 0.0)
        let vC = NSLayoutConstraint(item:self.view, attribute:NSLayoutAttribute.CenterY, relatedBy: NSLayoutRelation.Equal, toItem: self.imageview, attribute: NSLayoutAttribute.CenterY, multiplier: 1.0, constant: 0.0)
        yConstraint = vC;
        yConstraint!.constant = yConstraint!.constant - CGRectGetHeight(UIScreen.mainScreen().bounds)/2

        let widthC = NSLayoutConstraint(item:self.imageview!, attribute: NSLayoutAttribute.Width, relatedBy: NSLayoutRelation.Equal, toItem:nil, attribute: NSLayoutAttribute.NotAnAttribute, multiplier: 1.0, constant: 100)
        let widthH = NSLayoutConstraint(item:self.imageview!, attribute: NSLayoutAttribute.Height, relatedBy: NSLayoutRelation.Equal, toItem:nil, attribute: NSLayoutAttribute.NotAnAttribute, multiplier: 1.0, constant: 100)
        self.view.addConstraints([hC,vC,widthC,widthH])

        //定义最开始的状态
        self.imageview?.alpha = 0.0;
        self.imageview?.transform = CGAffineTransformMakeScale(0.1, 0.1);
        self.view.layoutIfNeeded()
    }
    override func viewWillAppear(animated: Bool) {
        yConstraint!.constant = yConstraint!.constant + CGRectGetHeight(UIScreen.mainScreen().bounds)/2
        UIView.animateWithDuration(1.0, animations: { () -> Void in
            self.imageview!.alpha = 1.0
            self.imageview!.transform = CGAffineTransformIdentity
            self.view.layoutIfNeeded()
        })
    }

}

定位Constraints

设置属性identifier

yConstraint.identifier = "identifier"

然后在过滤,定义到这个Constraints,

 let constraint =  filter(self.view.constraints() as! [NSLayoutConstraint], { (constraint:NSLayoutConstraint) -> Bool in
            return constraint.identifier == "identifier"
        }).first

版权声明:本文为博主原创文章,如需转载请注明出处

时间: 2024-11-05 06:12:28

iOS Core Animation详解(四)AutoLayout中的动画的相关文章

iOS Core Animation Advanced Techniques(四):隐式动画和显式动画

隐式动画 按照我的意思去做,而不是我说的. -- 埃德娜,辛普森 我们在第一部分讨论了Core Animation除了动画之外可以做到的任何事情.但是动画师Core Animation库一个非常显著的特性.这一章我们来看看它是怎么做到的.具体来说,我们先来讨论框架自动完成的隐式动画(除非你明确禁用了这个功能). 事务 Core Animation基于一个假设,说屏幕上的任何东西都可以(或者可能)做动画.动画并不需要你在Core Animation中手动打开,相反需要明确地关闭,否则他会一直存在.

iOS Core Animation详解(五)CATransition

欢迎关注我的iOS SDK详解专栏 http://blog.csdn.net/column/details/huangwenchen-ios-sdk.html 不知不觉iOS的动画系列文章已经写到第五篇了,在这里,能方便的找到我之前写的四篇关于动画的文章. 前言:CATransition 是CAAnimation的子类,最主要的用途是用来定义view reload的转场动画.使用这个集成好的类,可以几行代码就创建出不错的效果. 效果一 动图 核心代码, CATransition * transi

Core Animation详解(三)-UIDynamic Animation

原创Blog,转载请注明出处 blog.csdn.net/hello_hwc 前言:本文主要包括以下几部分 UIDynamic Animation是什么 如何创建UIDynamic Animation 每一种UIDynamic Animation讲解然后举例 附上Demo链接 由于都是动画,我就把这部分放在了Core Animation中了,严格意义上来说,它是Core Animation上层的封装. 一 什么是UIDynamic Animation UIDynamic Animation是IO

android动画详解六 XML中定义动画

动画View 属性动画系统允许动画View对象并提供很多比view动画系统更高级的功能.view动画系统通过改变绘制方式来变换View对象,view动画是被view的容器所处理的,因为View本身没有要操控的属性.结果就是View被动画了,但View对象本身并没有变化.在Android3.0中,新的属性和相应的getter和setter方法被加入以克服此缺点. 属性动画系统可以通过改变View对象的真实属性来动画Views.而且,View也会在其属性改变时自动调用invalidate()方法来刷

iOS Core Animation具体解释(四)AutoLayout中的动画

原创blog.转载请注明出处 blog.csdn.net/hello_hwc 欢迎关注我的iOS SDK具体解释专栏 http://blog.csdn.net/column/details/huangwenchen-ios-sdk.html 前言:AutoLayout定义了View的位置,也就是说,在Auto Layout的project里,假设不改动约束本身,在视图又一次绘制的时候.还会回到最開始的位置.AutoLayout中的动画与视图的位置和大小有关. 先看看效果 实现过程 在Storyb

iOS Animation详解

iOS Animation详解 本篇只要讲解iOS中动画的使用. Animtion主要分为两类:UIView动画和CoreAnimation动画. UIView动画有UIView属性动画,UIViewBlock动画,UIViewTransition动画. 而CoreAnimation动画主要通过CAAnimation和CALayer,常用的有CABasicAnimation,CAKeyframeAnimation,CATransition,CAAnimationGroup. UIView动画 U

Android中Animation详解

Animation从总体来说可以分为两类: Tweened Animations:该类提供了旋转,移动,伸展,淡入淡出等效果 Frame-By-Frame Animations:该类可以创建一个Drawable序列,这些Drawable可以按照指定的事件间隔一个一个显示,和动画片差不多 一.Tweened Animations Tweened Animations也有四种类型: Alpha:淡入淡出效果Scale:缩放效果Rotate:旋转效果Translate:移动效果 设置动画效果可以在XM

详解WebService开发中四个常见问题(1)

详解WebService开发中四个常见问题(1) WebService开发中经常会碰到诸如WebService与方法重载.循环引用.数据被穿该等等问题.本文会给大家一些很好的解决方法. AD:WOT2014:用户标签系统与用户数据化运营培训专场 任何问题都需要从它的根源说起,所以简单说一下WebService的工作原理.客户端调用一个WebService的方法,首先需要将方法名和需要传递的参数包装成XML(也就是SOAP包),通常是通过HTTP传递到服务器端,然后服务器端解析这段XML,得到被调

详解WebService开发中四个常见问题(2)

详解WebService开发中四个常见问题(2) WebService开发中经常会碰到诸如WebService与方法重载.循环引用.数据被穿该等等问题.本文会给大家一些很好的解决方法. AD:WOT2014:用户标签系统与用户数据化运营培训专场 问题三:循环引用 还是先来看一个例子.下面是WebService的接口: 1 @WebService2     public interface IHello {3     4         @WebMethod5         public Str