我有一种方法可以根据我的
UIImageView
的当前帧创建遮罩层,它按我的预期工作。但是,在一种情况下,我在 UIImageView
方法中修改 viewWillAppear
的高度约束,然后将遮罩创建器应用到 UIImageView
,这会创建一个具有磨损尺寸的遮罩。所以我的问题是,我怎样才能强制获得修改后的正确框架UIImageView
?
现在我得到的高度是 140,而不是 105,但是如果我在设置约束后使用
layoutIfNeeded
,它会变成 118,更接近,但仍然不是 105。
更新:
我用来创建蒙版的方法:
public func setupMaskForImageView() {
let mask = CALayer()
let resizedMaskImage = resizeImage(UIImage(named: imageMaskName)!, newSize: frame.size)
mask.contents = resizedMaskImage
mask.frame = CGRectMake(0, 0, frame.size.width, frame.size.height)
layer.mask = mask
layer.masksToBounds = true
}
我用
修改了
viewWillAppear
中的约束
imageHeight.constant = UIScreen.mainScreen().bounds.width / 2.5
将框架保持在
layoutSubiews
中始终是理想的选择。来自 Apple 开发者 UIKit doc:
- 如果您需要比约束或自动调整大小行为提供的更精确的子视图布局控制,请实现此方法。layoutSubviews
话虽这么说,你最好的选择可能是为你的自定义 UIImageView 创建一个子类,并在
layoutSubviews
中插入你的重构逻辑。这将确保您的视图和蒙版始终正确构图。