首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在设备旋转期间,基于大小元素的动画更改将在旋转完成后进行。

在设备旋转期间,基于大小元素的动画更改将在旋转完成后进行。
EN

Stack Overflow用户
提问于 2015-02-01 03:42:00
回答 1查看 4.7K关注 0票数 8

我有一个动态设置的按钮,自动调整的宽度和高度的基础上,自动布局限制设置在故事板。当在纵向按钮有相同的宽度和高度,因此框架是完全方形的,当设备旋转到景观时,按钮变得越来越短和宽。我在按钮的层上设置了cornerRadius,所以在肖像中它们是完美的圆形,而且效果很好,但是当我旋转到横向时,角半径不再明显地看起来是对的。我需要改变它,这样它就变成了椭圆形。问题是,无论我把代码放在哪里,在旋转发生后,我都无法得到正确的宽度和高度。我希望在设备被旋转时发生这种情况--不要等到旋转完成。理想情况下,cornerRadius会在转换激活时激活更改。

如果我使用viewWillLayoutSubviewsviewDidLayoutSubviews,它会在应用程序启动时正确地获得按钮框,但在旋转到横向时,该方法会在按钮的框架更新为新方向之前调用,因此无法计算正确的角半径。

如果我使用viewWillTransitionToSize:withTransitionCoordinator:willTransitionToTraitCollection:withTransitionCoordinator:willRotateToInterfaceOrientation,它在启动应用程序时不会被调用,在旋转设备时,它会在框架更新为新大小之前被调用。

如果我使用willAnimateRotationToInterfaceOrientation,它不会在应用程序启动时被调用,但是在旋转设备时,它会正确地得到新的按钮框。但这种方法是不可取的。

因此,问题是,在旋转完成之前,您可以使用什么方法根据按钮的大小来设置按钮的属性?

请注意,每个方向的更改都需要调用它,而不仅仅是大小类的更改(旋转的iPad不会更改size类)。我只需要支持iOS 8.0+。

这是我在方法中放置的代码,以了解它是否得到了正确的大小:

代码语言:javascript
运行
复制
println("\(button.frame.size.width) x \(button.frame.size.height)")
EN

回答 1

Stack Overflow用户

发布于 2015-02-01 04:00:22

答案是使用viewWillTransitionToSize:withTransitionCoordinator:,您的代码放在UIViewControllerTransitionCoordinatoranimateAlongsideTransition:方法的动画闭包中,这将允许您根据旋转完成时的大小来动画更改。

代码语言:javascript
运行
复制
override func viewWillTransitionToSize(size: CGSize, withTransitionCoordinator coordinator: UIViewControllerTransitionCoordinator) {
    super.viewWillTransitionToSize(size, withTransitionCoordinator: coordinator)

    coordinator.animateAlongsideTransition({ (context: UIViewControllerTransitionCoordinatorContext!) -> Void in
        self.updateButtonsCornerRadius()
    }, completion: nil)
}

但是,当应用程序启动时,不会调用此方法,因此您也需要在self.updateButtonsCornerRadius()中调用viewDidLoad

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28259204

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档