【问题标题】:Core animation (size change) with autolayout challenge带有自动布局挑战的核心动画(大小变化)
【发布时间】:2016-05-28 14:05:31
【问题描述】:

我使用 2 种方法制作了一段核心动画,以使对象的大小从现有位置的中心向外增长...

(1) viewDidLayoutSubviews()

self.imageView.frame = CGRectMake(187, 249, 0, 0)

位于此 imageView 对象的屏幕中心

(2) viewDidAppear() - 持续时间为 1 秒的动画块。例如

UIView.animateWithDuration(1.0, delay: 1.5, options: [], animations: {

        self.imageView.frame = CGRectMake(16, 70, 343, 358)

        }, completion: nil)

将对象放置在我希望它以全尺寸显示的位置,以适应特定的屏幕尺寸。

当我在 iPhone 尺寸上使用 CGRectMake(...) 的 x 和 y 坐标时,我正在寻找它们工作正常,但是当我尝试使用不同屏幕尺寸的模拟器时,它不能与 Autolayout 约束结合使用,但会覆盖现有的约束。

问题...

有没有办法让这个动画以某种方式与屏幕大小成比例,而不是明确的坐标和大小来使动画工作?通过 CGRectMake ...? (...这似乎表明使用自动布局和动画之间存在冲突)

理想情况下,我正在寻找一个优雅简单的解决方案?还是我处于技术的极限?

非常感谢!

【问题讨论】:

    标签: ios swift animation autolayout


    【解决方案1】:

    您可以使用自动布局约束设置 imageView 位置并为其设置大小约束,并通过从中获取一个插座,您可以为高度设置动画以增加所有其他约束的工作

    @IBOutlet var myViewHeight: NSLayoutConstraint!

    UIView.animateWithDuration(0.3,延迟:0.0,选项:[],动画: { () -> 无效

            self.myViewHeight.constant = 300
    
            self.view.layoutIfNeeded()
            }, completion:nil)
    

    您应该从约束本身中取出出口,例如控制+拖动 Label.top = topMargin

    【讨论】:

    • 当我创建从情节提要到代码 ViewController 的 IBOutlet 时,对象的选项是使用 UIImageView 创建,而不是 NSLayoutConstraint!。我还需要添加其他内容来尝试您的上述想法吗?
    • 另外 CGRectMake,动画的最终布局仍然需要精确的 x、y、宽度、高度,因此据我所知,动画和自动布局之间仍然存在冲突
    • 您将在超级视图 X、Y 中居中您的图像视图。然后您将给它一个 1:1 的纵横比,然后高度约束 = 0,您将把它作为一个出口然后您将制作动画高度 self.myViewHeight.constant = 300
    • 感谢您的解释,因为我是 Core Animation 的新手。以前没有这样玩过约束,所以这是新的。我学到了一些新东西。我为图像的“尾随”和“前导”添加了更多约束,以在使用 CGRectMake 时创建原始模拟的外观。我认为可能有一个使用 CGRectMake 的解决方案,但这作为一种解决方法可以完成这项工作。谢谢!
    猜你喜欢
    • 2014-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-05
    • 1970-01-01
    • 1970-01-01
    • 2011-06-16
    • 1970-01-01
    相关资源
    最近更新 更多