我正在开发一个具有一组UIButton实例的iPad应用程序,我在viewWillAppear:
中进行轻微的CGAffineTransform旋转,这样它们就不会在屏幕上完美对齐。但是,当设备向任何方向旋转并且按钮的背景图像变得越来越倾斜时,会出现问题:旋转的越多:
正确:
几次设备轮换后:
以下是我用来为viewDidAppear:
上的视图设置动画的代码:
/*
* Animate video button
*/
CGPoint videoCenter = self.videoButton.center;
self.videoButton.center = CGPointMake(self.videoButton.center.x + 25.0f, self.videoButton.center.y + 25.0f);
[UIView animateWithDuration:0.5f
delay:0.0f
options:UIViewAnimationOptionCurveEaseInOut
animations:^{
self.videoButton.center = videoCenter;
self.videoButton.transform = CGAffineTransformRotate(CGAffineTransformIdentity, [self convertDegreesToRadians:4.0f]);
}
completion:^(BOOL finished) {
// Do Nothing
}];
我已经尝试将变换重置为willRotateToInterfaceOrientation:
中我需要的变量,尽管它减少了它发生的程度,但经过多次旋转后它会产生类似的结果。
我尝试将主视图的autoresizesSubviews
更改为NO
:
self.view.autoresizesSubviews = NO;
但是我必须完全手工布置我的横向,我想避免。
如何设置旋转变换,使其不会扭曲设备方向上UIButton
的背景图像?
更新
我在viewWillRotateToInterfaceOrientation:
中添加了一些日志语句,并注意到按钮的宽度正在增长。这解释了图像失真,但为什么它甚至会发生变化?这对我来说很奇怪:
width height ------------------------------- 268.574524 149.81514 286.267822 150 304.092621 150 321.91745 150 339.742279 150 357.567078 150 374.401642 150 391.236206 150 409.061066 150 425.895599 150 442.730164 150 459.564728 150 476.399292 150 493.233826 150 509.078125 150 524.922424 150 540.766663 150 556.611023 150
答案 0 :(得分:0)
您遇到的问题可能是由于UIViewController在界面旋转时完成了自动调整。我的建议是,您要跟踪图像视图的原始框架,并在didRotateFromInterfaceOrientation:
中恢复原始框架。因此,在-viewDidLoad
中,执行以下操作以保存视图的框架:
videoFrame = self.videoButton.frame;
在此视图控制器的标题中,您还应声明CGRect videoFrame
以使上述代码正常工作。现在,我们可以在界面方向完成更改后使用此保存的框架:
- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)orientation {
CGPoint oldCenter = [self.videoButton center];
[self.videoButton setTransform:CGAffineTransformIdentity];
[self.videoButton setFrame:videoFrame];
// restore previous center and rotation
[self.videoButton setCenter:oldCenter];
[self.videoButton setTransform:CGAffineTransformRotate(CGAffineTransformIdentity, [self convertDegreesToRadians:4.0f])];
}