使用程序化的大小类别

14

我(希望)观看了所有相关的WWDC2014会议视频并阅读了文档,所以这个问题主要是为了确认我的猜想,但请您指导我。

我想做的是使用自动布局来实现视图动画。这本身不是问题。但是这些动画的终点在不同的方向上会发生改变。我想我可以使用大小类来在旋转时自动移动视图,但是苹果的开发者指南说,动画必须通过编程方式完成,而且据我所知,大小类是仅适用于Interface Builder的东西。

我还有一个想法是使用自定义布局指南,就像IB提供的顶部/底部一样,但那些似乎是硬编码的。

我最后能做的就是在监听旋转事件后手动更新约束,但这并不新鲜,而且我觉得大小类应该可以用于更多的内容,而不仅仅是静态界面。我是否高估了它们的目的?

简而言之:给定可以在其中两个点A和B处放置视图的原点(由于动画),如何使用大小类或类似的东西移动这两个点?

1个回答

22

在文档中仔细寻找后,我终于找到了有用的内容。 UIContentContainer 协议定义了 willTransitionToTraitCollection(:withTransitionCoordinator:) 方法,该方法的第一个参数(一个 UITraitCollection)包含水平和垂直大小类,以及一个 UIUserInterfaceIdiom(可以用来知道应用程序是否在 iPhone 或 iPad 上运行,虽然对于大多数事情应该使用大小类)。

此外,自 iOS 8 在横向视图中隐藏状态栏,因此在更改发生后会调用 traitCollectionDidChange(previousTraitCollection:) 方法,因此当调用此方法时,UIApplication.sharedApplication().statusBarHidden 的值已更改。例如,对于 UIScrollViewcontentInset 非常有用。

最后,如果您需要精确的屏幕尺寸(当然是以点为单位,但上述特征集合也知道像素密度),那么就有 viewWillTransitionToSize(:withTransitionCoordinator:) 方法。

希望这也能帮助其他人。


你有没有想法,我的UIView子类中的方法traitCollectionDidChange()会在什么时候被调用? - 拇指 muzhi.com
如果我没记错的话:设备旋转后,旋转的视图会被布局,然后过渡动画(即旋转动画)开始。 - Kolja

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接