何时获得正确的帧大小
Posted
技术标签:
【中文标题】何时获得正确的帧大小【英文标题】:When to obtain the right frame size 【发布时间】:2015-11-10 13:19:32 【问题描述】:问题:假设我有一个图像和一个元素,它不断地触发 viewDidLayoutSubviews(一个滚动视图......这样在每次滚动时都会调用 viewDidLayout......或者任何经常触发 viewDidLayout 的元素)。
此图像以及“viewDidLayout_element”都在情节提要中使用自动布局进行了很好的设置。
现在: 我需要使图像成为圆形图像。 典型的:layer.cornerRadius.. 和 layer.masksToBounds。这需要一个计算好的 imageView 框架。
我应该在哪个视图控制器周期中以编程方式制作它?考虑到:
*除了 viewDidLayoutSubviews 我没有得到正确的框架
*viewDidLayoutSubviews 可以被调用数千次,具体取决于触发它的“viewDidLayout_element”。
*如果我在 viewDidAppear 中的 imageView 上调用 layoutIfNeeded(因为这是框架已经可用的唯一情况,因此我们可以强制它们进行计算),用户将已经瞥见从方形图像到圆形图像的转换。换句话说,在 viewDidAppear 中,框架可供我们操作,但用户的眼睛也可以在毫秒内使用。
*用标志填充 viewDidLayoutSubviews 是没有意义的(特别是如果有比圆形 imageView 转换更密集的性能),如下所示:
if !iDidChangedTheImage
imageView.applyCornerRadius()
问题:
在没有上述问题的情况下,我在 viewController 循环中哪里有正确的帧大小?或者你通常如何解决这个问题?
【问题讨论】:
【参考方案1】:将UIImageView
子类化为您的自定义类,并覆盖layoutSubviews
。之后,您无需关心图像视图大小的变化和更新角半径,只需将该类用于您的自定义图像视图
@implementation CustomImageView
- (void)awakeFromNib
[super awakeFromNib];
self.layer.masksToBounds = YES;
- (void)layoutSubviews
[super layoutSubviews];
self.layer.cornerRadius = self.frame.size.height / 2.0;
@end
【讨论】:
以上是关于何时获得正确的帧大小的主要内容,如果未能解决你的问题,请参考以下文章