【发布时间】:2015-08-10 10:04:12
【问题描述】:
我有一个CAShapeLayer 子类,它创建一个六边形作为其边界的路径。我有另一个CALayer 并将图像添加为CALayer 的content,然后我将CALayer 的mask 属性设置为六边形层。当我将它添加为我的 viewController 视图的子层时,图像会正确显示(剪裁为六边形)。
-(void)viewDidLoad {
[super viewDidLoad];
MBFHexLayer *hex = [MBFHexLayer hexLayer];
hex.orientation = MBFHexOrientationPointyTopped;
hex.frame = self.view.bounds;
_hexTile = [CALayer layer];
_hexTile.frame = self.view.bounds;
_hexTile.mask = hex;
_hexTile.contents = (id)[UIImage imageNamed:@"grass.jpg"].CGImage;
[self.view.layer addSublayer:_hexTile];
}
在viewDidLayoutSubviews 中,我将图像层的边界设置为视图的边界,并在我的六边形蒙版层中覆盖了layoutSublayers 以重新计算路径。
- (void)viewDidLayoutSubviews {
[super viewDidLayoutSubviews];
NSLog(@"View Bounds:%@", NSStringFromCGRect(self.view.bounds));
_hexTile.frame = self.view.bounds;
[_hexTile setNeedsLayout];
[_hexTile layoutSublayers];
}
CAShapeLayer:
-(void)layoutSublayers {
[self recalcGeometry];
self.path = [self layerPath].CGPath;
}
当我旋转显示器时,不会在我的六边形蒙版层上调用 layoutSublayers 方法,并且图像不再在视图中正确剪辑。
我对正确的更新链是什么感到困惑,任何指针都将不胜感激。
【问题讨论】:
标签: ios objective-c core-graphics calayer