2015-06-16 7 views
1

Я пытаюсь замаскировать один CALayer (Newsticker) с изображением другого слоя (stickerMask), например так:маска CALayer с другим CALayer

func placeSticker(location: CGPoint) { 

    let stickerMask = CALayer() 
    stickerMask.contents = UIImage(contentsOfFile:NSBundle.mainBundle().resourcePath!.stringByAppendingPathComponent("brush\(self.stickerSelected).png"))!.CGImage 
    stickerMask.frame = CGRect(x: location.x * 100, y: location.y * 100, width: 200, height: 200) 

    let newSticker = CALayer() 
    newSticker.backgroundColor = UIColor(red: self.red, green: self.green, blue: self.blue, alpha: 1.0).CGColor 
    newSticker.frame = 
     CGRect(x: location.x * 100, y: location.y * 100, width: 200, height: 200) 
    newSticker.mask = stickerMask 
    self.picturesView.layer.addSublayer(newSticker) 

} 

Если добавить stickerMask сам по себе в моем «picturesView» слой, он правильно загружается на экран, а newSticker будет загружаться с соответствующим пользовательским цветом фона.

Моя проблема заключается в том, что как только вы применяете stickerMask к newSticker.mask, ничего не появляется вообще. Я попытался установить masksToBounds как false, так и true, но получить тот же результат.

Любые идеи о том, что я делаю неправильно?

+0

Возможно, проблема связана с рамкой маски. Попробуйте использовать x = 0 и y = 0 для фрейма маски, и если он работает, вам просто нужно точно вычислить фрейм маски. – tikhop

+0

tikhop, это было именно так! Большое спасибо. – jwade502

ответ

1

Проблема с расчетом рамки маски.

Убедитесь, что когда какой-либо слой является маской, вы должны рассчитать фрейм маски, как если бы он был только подслоем суперслоя.

Другими словами, система координат маски соответствует системе координат сверхслоев.

Смежные вопросы