我需要一个视图在某些条件下有圆角,而在其他条件下有正方形。
但是,当我第一次尝试重新设置视图的layer.mask时,视觉上没有任何变化。
我首先在layoutSubviews方法中设置角落
- (void)layoutSubviews
{
// Create the mask image by calling the function
UIImage *mask = MTDContextCreateRoundedMask( self.bounds, 10.0, 0.0, 10.0, 0.0 );
// Create a new layer that will work as a mask
CALayer *layerMask = [CALayer layer];
layerMask.frame = self.bounds;
// Put the mask image as content of the layer
layerMask.contents = (id)mask.CGImage;
// set the mask layer as mask of the view layer
self.layer.mask = layerMask;
}
然后一旦满足条件,我就会调用另一种方法
- (void)resetCorners {
// Create the mask image by calling the function
UIImage *mask = MTDContextCreateRoundedMask( self.bounds, 0.0, 0.0, 0.0, 0.0 );
// Create a new layer that will work as a mask
CALayer *layerMask = [CALayer layer];
layerMask.frame = self.bounds;
// Put the mask image as content of the layer
layerMask.contents = (id)mask.CGImage;
// set the mask layer as mask of the view layer
self.layer.mask = layerMask;
}
然而,没有视觉上的变化。我需要做什么?
答案 0 :(得分:1)
您应该避免在layoutSubviews中修改视图(或在本例中为图层)层次结构。我建议创建一个像- (void)setRoundedCornersEnabled:(BOOL)roundedCornersEnabled
这样的方法,它可以适当地修改图层以创建圆角或方形效果。
在大多数情况下,layoutSubviews
中您需要的唯一代码是修改子视图框架的代码,无论layoutSubviews
在视图的所有可能状态下都应该工作(在这种情况下是圆角)启用与否)。 UIKit经常自己调用layoutSubviews,所以你不能完全控制何时调用该方法。