首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UIButtons titleLabel在CGAffineTransformMakeRotate()旋转后剪辑文本

UIButtons titleLabel在CGAffineTransformMakeRotate()旋转后剪辑文本
EN

Stack Overflow用户
提问于 2013-07-04 18:10:23
回答 2查看 887关注 0票数 2

我正在开发一个iOS-6应用程序。我有一个UIViewController视图,需要固定的方向(纵向模式)。但是当手机被旋转时,该视图上的一个控件需要被移动和旋转(这样它总是在左上角,并且它的文本将是可读的)。

为此,我使用控件的框架属性(它是自定义视图,稍后将详细介绍)移动控件( UIView),然后使用CGAffineTRansformMakeRotate(),因为我知道在旋转视图后使用frame是不可取的。到目前为止,一切都很好,但问题是:该自定义视图有三个类型为UIButtonsUIButtonTypeCustom类型的子视图。因为我旋转了视图,但不能在视图中旋转按钮(它们不是正方形),所以我需要旋转按钮的titleLabels,以便文本在新的deviceOrientation中可读。

但效果不太好。如我所愿,文本将被旋转,但它将被titleLabel裁剪,因为titleLabel有错误的框架。我通过将边框应用到标签上来检查这一点。所以我需要改变titleLabels框架,对吗?但我怎么能做到呢?我试着使用[titleLabel setFrame: frameThatFits];设置它,但没有结果。(frameThatFits是我创建的CGRect )。此外,调用[button.titleLabel sizeToFit];也没有我所能看到的效果。我使用[button setTitle:title forControlState: UIControlStateNormal];来设置标题。

TL;博士:我试图在使用仿射变换旋转UIButtons titleLabel后改变它的帧/界。有什么帮助吗?谢谢。

PS: --我可以在需要时提供代码,但我不知道该向您展示什么。告诉我你需要什么,我会发出去的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-07-05 09:34:32

好吧,首先,感谢所有想帮忙的人。我为我的问题发布了另一种解决方案,虽然它并没有真正解决更改titleLabels维度的问题,但它将导致正确地显示我的ViewController。结果发现使用这个框架是个坏主意。我最初使用这个框架来重新定位视图,我认为这不会是一个问题,因为我只在之后应用了转换,但我错了。因为很明显,我试图更改titleLabels框架。在轮换之后。但那不起作用。因此,这里的方法是在整个代码中始终使用中间属性和视图的树枝。这将导致正确的旋转按钮,这不需要任何烦躁之后。我在这里的启示是,我再也不会使用NSLog-语句之外的框架属性了。但是,为什么[button sizeToFit];不会产生任何结果仍然是我无法理解的。如果我想清楚了,如果我还记得的话,我可能会把它发出去。

编辑:@ZevEisenberg评论:“警告:如果transform属性不是标识转换,则该属性的值未定义,因此应该被忽略。”所以,在这里使用中间和边界是正确的,但是如果没有转换,框架是完全安全的使用。

下一步编辑:下面是我如何重新定位按钮:

代码语言:javascript
复制
-(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重新定位它们,并将正确的旋转转换应用于视图。每次副视图旋转时,我都会这样做,如下所示:

代码语言:javascript
复制
-(void)setRightRotationTransformations{
[self resetAllTransformations];
self.someSubview.transform = CGAffineTransformRotate(self.someSubview.transform, -M_PI_2);
}
票数 0
EN

Stack Overflow用户

发布于 2016-10-31 23:52:00

在我的案例中,这样的攻击是可行的:

  1. 将断线模式设置为Word Wrap
  2. 在标题中添加额外行(即使是一行标题)

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

https://stackoverflow.com/questions/17476142

复制
相关文章

相似问题

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