我正在开发一个iOS-6应用程序。我有一个UIViewController视图,需要固定的方向(纵向模式)。但是当手机被旋转时,该视图上的一个控件需要被移动和旋转(这样它总是在左上角,并且它的文本将是可读的)。
为此,我使用控件的框架属性(它是自定义视图,稍后将详细介绍)移动控件( UIView),然后使用CGAffineTRansformMakeRotate(),因为我知道在旋转视图后使用frame是不可取的。到目前为止,一切都很好,但问题是:该自定义视图有三个类型为UIButtons的UIButtonTypeCustom类型的子视图。因为我旋转了视图,但不能在视图中旋转按钮(它们不是正方形),所以我需要旋转按钮的titleLabels,以便文本在新的deviceOrientation中可读。
但效果不太好。如我所愿,文本将被旋转,但它将被titleLabel裁剪,因为titleLabel有错误的框架。我通过将边框应用到标签上来检查这一点。所以我需要改变titleLabels框架,对吗?但我怎么能做到呢?我试着使用[titleLabel setFrame: frameThatFits];设置它,但没有结果。(frameThatFits是我创建的CGRect )。此外,调用[button.titleLabel sizeToFit];也没有我所能看到的效果。我使用[button setTitle:title forControlState: UIControlStateNormal];来设置标题。
TL;博士:我试图在使用仿射变换旋转UIButtons titleLabel后改变它的帧/界。有什么帮助吗?谢谢。
PS: --我可以在需要时提供代码,但我不知道该向您展示什么。告诉我你需要什么,我会发出去的。
发布于 2013-07-05 09:34:32
好吧,首先,感谢所有想帮忙的人。我为我的问题发布了另一种解决方案,虽然它并没有真正解决更改titleLabels维度的问题,但它将导致正确地显示我的ViewController。结果发现使用这个框架是个坏主意。我最初使用这个框架来重新定位视图,我认为这不会是一个问题,因为我只在之后应用了转换,但我错了。因为很明显,我试图更改titleLabels框架。在轮换之后。但那不起作用。因此,这里的方法是在整个代码中始终使用中间属性和视图的树枝。这将导致正确的旋转按钮,这不需要任何烦躁之后。我在这里的启示是,我再也不会使用NSLog-语句之外的框架属性了。但是,为什么[button sizeToFit];不会产生任何结果仍然是我无法理解的。如果我想清楚了,如果我还记得的话,我可能会把它发出去。
编辑:@ZevEisenberg评论:“警告:如果transform属性不是标识转换,则该属性的值未定义,因此应该被忽略。”所以,在这里使用中间和边界是正确的,但是如果没有转换,框架是完全安全的使用。
下一步编辑:下面是我如何重新定位按钮:
-(CGPoint)centerForView:(UIView *)view{
//calculate a suitableposition for the view
//depending on the current orientation and the device type (iphone 4S/5, etc)
return point;
}然后,作为对deviceOrientation更改通知的反应,我将CGAffineTransformIdentity应用于所有视图,使用上面所示的centerForView重新定位它们,并将正确的旋转转换应用于视图。每次副视图旋转时,我都会这样做,如下所示:
-(void)setRightRotationTransformations{
[self resetAllTransformations];
self.someSubview.transform = CGAffineTransformRotate(self.someSubview.transform, -M_PI_2);
}发布于 2016-10-31 23:52:00
在我的案例中,这样的攻击是可行的:
Word Wrap

https://stackoverflow.com/questions/17476142
复制相似问题