CALayer在轮换时重绘

时间:2011-11-23 21:41:20

标签: objective-c ios ipad calayer

我的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像素的间隙...

任何想法或更好的方法吗?

3 个答案:

答案 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中做这件事......?