【发布时间】:2015-04-14 15:08:33
【问题描述】:
我有一个图像视图,我通过在我的子类中覆盖以下内容来实现圆角:
-(void)setFrame:(CGRect)frame {
[super setFrame:frame];
[self.layout setCornerRadius:frame.size.width/10.0];
}
这对于图像的初始显示非常有用,但是如果图像的大小由于设备旋转或其他机制而发生变化,则不会调用此方法来实现调整大小。
我正在使用自动布局,我想知道当我的约束调整视图大小时调用 UIView(以及 UIImageView)的什么方法,以便在发生这种调整大小时重新计算角半径。我的(显然是错误的)假设是自动布局系统调用setFrame: 来根据需要移动/调整视图大小。
【问题讨论】:
-
试试把这个放到
layoutSubviews。 -
把它放在 layoutSubviews 工作!谢谢罗伯。我看到的唯一问题是变化是突然的而不是平滑的动画,当图像从大到小调整大小时会产生“闪烁”效果,反之亦然。我试着把它放在 drawRect: 中,看看它是否给我一个调整角落大小的平滑动画,但似乎 drawRect: 甚至没有被调用(至少在模拟器中没有)!
-
查看 UIView 类参考:developer.apple.com/library/ios/documentation/UIKit/Reference/… 有一个名为“Subclassing Notes”的特定块可能对您很有帮助。
-
当做一个需要与旋转协调的动画时,例如,你可以使用
animateAlongsideTransition和过渡协调器。当动画无法使用基于块的动画进行动画处理时,您可以将其与显示链接结合使用:: stackoverflow.com/a/28259619/1271826 -
很高兴知道!我同意您在该线程中的评论,“坦率地说,我不确定这个圆角半径动画是否足以证明这个显示链接的合理性(我不得不用 command+T 减慢模拟器中的动画以欣赏差异),但是这说明了基本思想。”我可能会坚持使用 layoutSubviews 的原始建议。再次感谢!
标签: ios uiview resize autolayout frame