2016-11-24 3 views
1

Я попытался добавить слой маски в UIImageView. Это изображение имеет изображение, а слой маски удерживает другое изображение, устанавливая его содержимое. Но когда я добавляю слой маски на слой изображения, слой маски не содержит никакого изображения. Уровень маски был инициализирован геттером. Маскирующий слой добавления метода ниже:Как установить содержимое CAShapeLayer, которое было сформировано UIBezierPath

- (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 просто нормальный слой, а не маску. Если вы хотите использовать его как маску, вы должны использовать свойство maskCALayer и не добавлять его в качестве подуровня.
  2. Ваш слой должен содержать изображение и путь и должен быть подслоем в представлении изображения. Я думаю, что его проще использовать представление изображения и добавить его как subview в imageView.
  3. Если вы хотите использовать изображение в качестве маски, которое должно быть возможно, вы не должны использовать изображение JPEG в качестве источника. Учитываются только альфа-значения слоя маски, но альфа-значения всего изображения JPEG являются единичными. Таким образом, использование изображения в формате JPEG эквивалентно использованию заполненного квадрата или без маски.