旋转 UIView 并在旋转后保持纵横比
Posted
技术标签:
【中文标题】旋转 UIView 并在旋转后保持纵横比【英文标题】:Rotate UIView and keep aspect ratio after rotation 【发布时间】:2012-02-28 08:26:14 【问题描述】:我想旋转 UIView,但旋转后视图会调整大小。我正在使用自动调整大小标志“UIViewAutoresizingNone”。
这是我的代码:(从layoutSubViews
调用)
- (void) setVerticalLabelFrame:(CGRect)r
r.origin.y +=100.0f;
r.size.height = 20.0f;
r.size.width = 180.0f;
[[self rotatatingView] setFrame:r];
//[[self rotatatingView] setTransform:CGAffineTransformMakeRotation(M_PI / 4.0f)];
这里是旋转视图的延迟初始化。
- (UIView*)rotatatingView
if (rotatatingView == nil)
rotatatingView = [[UIView alloc] initWithFrame:CGRectZero];
[rotatatingView setBackgroundColor:[UIColor orangeColor]];
[rotatatingView setAutoresizingMask:UIViewAutoresizingNone];
[[self imageView] addSubview:rotatatingView];
return rotatatingView;
第一个镜头带有注释的最后一行,第二个镜头未注释该行。 有什么想法吗?
【问题讨论】:
【参考方案1】:如果要设置非恒等变换矩阵,则需要设置 bounds
和 center
。根据the docs:
警告如果此属性不是恒等变换,则 frame 属性的值未定义,因此应被忽略。
所以试试这样的:
- (void) setVerticalLabelFrame:(CGRect)r
CGRect bounds = CGRectZero;
bounds.size.height = 20.0f;
bounds.size.width = 180.0f;
CGPoint center;
center.x = r.origin.x + (bounds.size.width / 2.0f);
center.x = r.origin.y + (bounds.size.height / 2.0f) + 100.0f;
[[self rotatingView] setTransform:CGAffineTransformIdentity];
[[self rotatingView] setCenter:center];
[[self rotatingView] setBounds:bounds];
[[self rotatingView] setTransform:CGAffineTransformMakeRotation(M_PI / 4.0f)];
【讨论】:
这并没有真正帮助。它仍在调整大小。 嗯。你能告诉我们rotatingView
是什么吗?它是如何定义的,等等?
用我的旋转视图的惰性初始化代码更新了原始帖子。
如果在setVerticalLabelFrame:
中设置中心和边界之前将rotatingView
的变换设置为CGAffineTransformIdentity
,会发生什么?
非常感谢先生!这有帮助。您能否将其添加到您的答案中,然后我接受并评价它! Nvm,加了!以上是关于旋转 UIView 并在旋转后保持纵横比的主要内容,如果未能解决你的问题,请参考以下文章