2013-04-27 90 views
0

我试图将图像裁剪为不规则形状,但我需要将该区域移除为透明。的UIView使用CALayers使遮罩区域周围变得透明?

CALayer *myLayer = [CALayer layer]; 
    CAShapeLayer *mask = [CAShapeLayer layer];  
    myLayer.frame = self.bounds; 
    myLayer.contents = (id)[self.picture CGImage]; 
    mask.path = path; 
    myLayer.mask = mask; 
    [self.layer addSublayer:myLayer]; 

此的

内的子类会适当地裁剪图像,但是视图的背景颜色是白色,因此仍然可见。我试图让其他图层透明,但它没有奏效。

(个体经营和子视图都指向同一个视图)

[self layer].backgroundColor = [UIColor clearColor].CGColor //no change 
[self layer].opacity = 0; //makes entire view transparent 
subView.backgroundColor = [UIColor clearColor]; // entire view becomes transparent 

是否有可能创造我想要达到什么效果?

回答

0

我想同样的事情,这里是确切的代码:

// In KMViewController.m 
- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    self.view.backgroundColor = [UIColor lightGrayColor]; 
    CGRect frame = CGRectMake(0.0f, 0.0f, 100.0f, 100.0f); 
    KMView *view = [[KMView alloc] initWithFrame:frame]; 
    view.center = self.view.center; 
    [self.view addSubview:view]; 
} 

// In KMView.m 
- (id)initWithFrame:(CGRect)frame 
{ 
    self = [super initWithFrame:frame]; 
    if (self) { 
     // self.backgroundColor = [UIColor clearColor]; 
     CALayer *layer = [CALayer layer]; 
     CAShapeLayer *mask = [CAShapeLayer layer]; 
     layer.frame = self.bounds; 
     UIImage *image = [UIImage imageNamed:@"orange"]; 
     layer.contents = (id)image.CGImage; 
     CGPathRef path = CGPathCreateWithEllipseInRect(frame, NULL); 
     mask.path = path; 
     CGPathRelease(path); 
     layer.mask = mask; 
     [self.layer addSublayer:layer]; 
    } 
    return self; 
} 

它为我工作正常。背景是透明的。然后我尝试添加

self.backgroundColor = [UIColor clearColor]; 

到代码并没有什么的改变时,图像被显示在透明背景上开始裁剪到的路径。

我认为问题可能在其他地方。

iPhone

+0

将逻辑放在init与drawrect之间有没有区别?矿井不正确;这是我目前看到的唯一区别。 – Mahir 2013-04-27 15:16:05

+0

我会测试自己,但我目前没有访问我的代码 – Mahir 2013-04-27 15:16:58

+0

这段代码不应该在'drawRect:'中。 'drawRect:'意味着像CGPath's等Core Graphics绘图代码。将代码放在'initWithFrame:'中,看它是否有效。 – kmikael 2013-04-27 23:29:25