我的CALayer绘图代码中有这个
- (void) drawInContext:(CGContextRef)ctx {
self.frame = self.superlayer.bounds;
CGFloat height = self.bounds.size.height;
CGFloat width = self.bounds.size.width;
CGContextSetFillColorWithColor(ctx, [UIColor grayColor].CGColor);
//Draw a stripe every other pixel
int count = 0;
while (count < height) {
CGContextFillRect(ctx, CGRectMake(0, count, width, 1));
count=count+2;
}
}
基本上,它的图钉在条纹顶部有条纹。我希望它填补这个观点。
视图固定为40高和iPad的宽度。
当我旋转时,我告诉CALayer重绘(这是另一个问题 - 我宁愿它自动缩放到新的宽度)。
即使上面的宽度和高度的日志输出,它也是正确的。但当它在风景中绘制时 - 右边有一个约100像素的间隙...
任何想法或更好的方法吗?
答案 0 :(得分:2)
-(void)layoutSublayersOfLayer:(CALayer *)layer{
CGFloat ht = self.frame.size.height/2 - 55/2;
arrowImage.frame = CGRectMake(self.frame.size.width-30, ht, 30.0f, 55.0f);
}
arrowImage is a CALayer
这对我很有用。
答案 1 :(得分:1)
您需要覆盖父图层中的layoutSublayers。或父视图中的layoutSubviews(告诉它在这两种方法中重绘)。
答案 2 :(得分:-1)
浪费我的时间......我放弃了,并采取了不同的方式。
另外......核心动画编程指南骗了我,告诉我CALayer有一个autoResizingMask - 这可能会解决这个问题。它没有这个属性,不管它的iOS版本.... MacOS版本可能有它。
我在CALayer中取消了它并在UIView上的drawRect中做了同样的事情并设置了我的UIView的autoResizingMask。
这解决了它。虽然不知怎的,我觉得我应该在CALayer中做这件事......?