【问题标题】:Using size classes programmatically以编程方式使用大小类
【发布时间】:2014-10-17 11:03:53
【问题描述】:

我(希望)观看了所有相关的 WWDC2014 会议视频并阅读了文档,所以这个问题主要是为了证实我的怀疑,但请教育我。

我想做的是使用自动布局为视图设置动画。这本身不是问题。但是这些动画的端点会随着不同的方向而变化。我以为我可以使用尺寸类在旋转时自动移动视图,但 Apple 的开发人员指南说动画必须以编程方式完成,据我所知,尺寸类是 Interface-Builder-only 的东西。

我的另一个想法是使用自定义布局指南,例如 IB 提供的顶部/底部指南,但这些似乎是硬编码的。

我能做的最后一件事是在听到旋转事件后手动更新约束,但这并不是什么新鲜事,而且我觉得尺寸类应该不仅仅用于静态接口。我是否高估了他们的目的?

TLDR:给定两个点 A 和 B,一个视图可以有其原点(由于动画),我如何使用尺寸类或类似的东西移动这两个点?

【问题讨论】:

    标签: ios interface-builder autolayout ios8 size-classes


    【解决方案1】:

    在对文档进行了更多挖掘之后,我终于找到了一些有用的东西。 UIContentContainer 协议定义了willTransitionToTraitCollection(:withTransitionCoordinator:),并且该方法的第一个参数(UITraitCollection)包含水平和垂直尺寸类以及UIUserInterfaceIdiom(可用于了解应用程序是否在 iPhone 或iPad,尽管大多数情况下都应使用尺寸等级)。

    另外,由于iOS 8在横向视图中隐藏了状态栏,traitCollectionDidChange(previousTraitCollection:)是更改发生后被调用的对应方法,所以UIApplication.sharedApplication().statusBarHidden的值在调用该方法时发生了更改。例如,可用于UIScrollViewcontentInset

    最后,如果您需要精确的屏幕尺寸(当然,以磅为单位,但上述 trait 集合也知道像素密度),有viewWillTransitionToSize(:withTransitionCoordinator:)

    希望这对其他人也有帮助。

    【讨论】:

    • 你知道我的 UIView 子类中的这个方法 traitCollectionDidChange() 什么时候会被调用?
    • 如果我没记错的话:设备旋转后。布置旋转的视图,然后发生过渡动画(=旋转动画)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-09-08
    • 2013-09-06
    • 2015-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-09
    相关资源
    最近更新 更多