CALayer没有在自定义UIView的范围内绘图

时间:2012-06-01 04:14:23

标签: objective-c uiview calayer

我创建了一个自定义UIView,我最终会有10个区域供用户点击。当点击一个区域时,我想覆盖一个低alpha层以指示它们的选择。

不幸的是,当我点击一个部分时,我创建的CALayer正在我的自定义视图范围之外绘制。似乎我的x和y坐标都关闭了。

这是我的自定义视图中的drawRect方法:

- (void)drawRect:(CGRect)dirtyRect
{
    if (touchPoint.x > 0 || touchPoint.y > 0){
        CGRect bounds = [self bounds];

        float widthOfArea = bounds.size.width / 10.0;

        float sectionNumber = round(touchPoint.x / widthOfArea);

        touchOverlayLayer = [[CALayer alloc] init];

        [touchOverlayLayer setBounds:CGRectMake(0.0, 0.0, widthOfArea, bounds.size.height)];

        [touchOverlayLayer setPosition:CGPointMake(widthOfArea * sectionNumber, self.bounds.origin.y)];

        UIColor *greyish = [UIColor colorWithRed:0.5 green:0.5 blue:0.5 alpha:.5];

        CGColorRef cggreyish = [greyish CGColor];

        [touchOverlayLayer setBackgroundColor:cggreyish];

        [[self layer] addSublayer:touchOverlayLayer];
    }
}

显示结果显示。Layers not drawing in the correct place

2 个答案:

答案 0 :(得分:4)

setPosition将图层的锚点放在该位置。图层的默认锚点是中心。这与你所看到的非常吻合。

您可以将锚点设置为0,0然后设置位置,您应该没问题。

以下是锚点等的简要说明。

这有点棘手。框架,边界和位置都绑在一起。在您的情况下,您可以设置图层的框架并且您可以正常使用,当您要旋转或以其他方式转换图层时,锚点更常用于它 - 它将成为转换的起源。如果您更改锚点,它会移动图层,但之后您将设置位置,以便再次将其移回。文档在这方面有点弱,但网上有很多例子。

锚点成为一切发生的位置。因此,如果设置位置,图层会移动,使其锚点位于该位置。如果旋转图层,它会围绕锚点等旋转

答案 1 :(得分:0)

只添加此行

touchOverlayLayer.anchorPoint = CGPointMake(0,0);

默认的anchorPoint是0.5,0.5意味着在图层的中心。