2013-04-27 93 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