2016-11-24 27 views
1

我試圖在UIImageView上添加一個遮罩層。該imageview保存圖像,遮罩層通過設置其內容來保存另一個圖像。但是,當我將遮罩層添加到imageview層時,遮罩層不包含任何圖像。掩模圖層已由getter初始化。添加遮罩層的方法如下:如何設置由UIBezierPath成形的CAShapeLayer的內容

- (void)circleButtonClicked{ 
    self.maskLayer.contents = (id)[UIImage imageNamed:@"mask.jpg"].CGImage; 
    self.maskLayer.frame = CGRectMake(0, 0, kSCREEN_WIDTH, kSCREEN_WIDTH); 
    self.maskLayer.opacity = 0.5; 

    [self.imageView.layer addSublayer:self.maskLayer]; 

    UIBezierPath * pPath = [UIBezierPath bezierPathWithArcCenter:self.imageView.center radius:(kSCREEN_WIDTH-100)/2 startAngle:0.0 endAngle:M_PI*2 clockwise:YES]; 
    self.maskLayer.path = pPath.CGPath; 
    UIBezierPath * otherPath = [UIBezierPath bezierPathWithRect:CGRectMake(0, 0, kSCREEN_WIDTH, kSCREEN_WIDTH)]; 
    self.maskLayer.path = otherPath.CGPath; 
    [otherPath appendPath:pPath]; 
    self.maskLayer.path = otherPath.CGPath; 
    self.maskLayer.fillRule = kCAFillRuleEvenOdd; 
} 

回答

1

形狀圖層用於顯示路徑而不是圖像。有三種不同的方法來提供圖層內容(請參閱Core Animation Programming Guide),但一次只能提供一種。

有在你的代碼中的一些事情,我不明白:

  1. maskLayer僅僅是一個正常的層,而不是面具。如果要將其用作掩碼,則應使用CALayermask屬性,而不要將其添加爲子圖層。
  2. 您的圖層應該包含圖像和路徑,並且應該是圖像視圖中的子圖層。我認爲它更容易使用圖像視圖並將其作爲子視圖添加到imageView
  3. 如果你想使用一個圖像作爲掩模,這應該是可能的,你不應該使用JPEG圖像作爲源。只考慮遮罩層的Alpha值,但整個JPEG圖像的Alpha值爲1。因此,使用JPEG圖像相當於使用填充正方形,或不應用任何蒙版。
相關問題