gpt4 book ai didi

ios - 用另一个 CALayer 屏蔽一个 CALayer

转载 作者:技术小花猫 更新时间:2023-10-29 10:14:32 29 4
gpt4 key购买 nike

我正在尝试使用 CALayers 制作一个 donut 形状。一个 CALayer 将是一个大圆圈,另一个将是一个位于其中心的小圆圈,将其遮盖。

大圆圈显示正常,但每当我调用 circle.mask = circleMask; 时, View 就会显示为空。

这是我的代码:

AriDonut.h

#import <UIKit/UIKit.h>

@interface AriDonut : UIView
-(id)initWithRadius:(float)radius;
@end

AriDonut.m

#import "AriDonut.h"
#import <QuartzCore/QuartzCore.h>

@implementation AriDonut

-(id)initWithRadius:(float)radius{
self = [super initWithFrame:CGRectMake(0, 0, radius, radius)];
if(self){

//LARGE CIRCLE
CALayer *circle = [CALayer layer];
circle.bounds = CGRectMake(0, 0, radius, radius);
circle.backgroundColor = [UIColor redColor].CGColor;
circle.cornerRadius = radius/2;
circle.position = CGPointMake(radius/2, radius/2);

//SMALL CIRLCE
CALayer *circleMask = [CALayer layer];
circleMask.bounds = CGRectMake(0, 0, 10, 10);
circleMask.cornerRadius = radius/2;
circleMask.position = circle.position;

//circle.mask = circleMask;

[self.layer addSublayer:circle];

}

return self;
}

我试过像这样设置大圆圈的超层 nil:

CALayer *theSuper = circle.superlayer;
theSuper = nil;

但这并没有什么不同。

我还尝试将 Circle 的 masksToBounds 属性设置为 YES 和 NO,但这并没有什么不同。

有什么想法吗?

最佳答案

确实,正如@David 指出当前 (iOS 5.1) CALayer 蒙版无法反转,如果您想使用它们将透明孔制作成简单的圆形 CALayer,这会带来问题。

要获得 donut ,您可以做的是使圆形 CALayer 的 backgroundColor 透明,但给它一个 borderColor 和一个宽的 borderWidth。这是邓肯代码:

    CALayer *theDonut = [CALayer layer];
theDonut.bounds = CGRectMake(0,0, radius, radius);
theDonut.cornerRadius = radius/2;
theDonut.backgroundColor = [UIColor clearColor].CGColor;

theDonut.borderWidth = radius/5;
theDonut.borderColor = [UIColor orangeColor].CGColor;

[self.layer addSublayer:theDonut];

关于ios - 用另一个 CALayer 屏蔽一个 CALayer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11720362/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com