我创建了一个自定义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];
}
}
显示结果显示。
答案 0 :(得分:4)
setPosition将图层的锚点放在该位置。图层的默认锚点是中心。这与你所看到的非常吻合。
您可以将锚点设置为0,0然后设置位置,您应该没问题。
以下是锚点等的简要说明。
这有点棘手。框架,边界和位置都绑在一起。在您的情况下,您可以设置图层的框架并且您可以正常使用,当您要旋转或以其他方式转换图层时,锚点更常用于它 - 它将成为转换的起源。如果您更改锚点,它会移动图层,但之后您将设置位置,以便再次将其移回。文档在这方面有点弱,但网上有很多例子。
锚点成为一切发生的位置。因此,如果设置位置,图层会移动,使其锚点位于该位置。如果旋转图层,它会围绕锚点等旋转
答案 1 :(得分:0)
只添加此行
touchOverlayLayer.anchorPoint = CGPointMake(0,0);
默认的anchorPoint是0.5,0.5意味着在图层的中心。