簡體   English   中英

使用CALayer和UIImage在Swift中屏蔽圖像

[英]Masking an image in Swift using CALayer and UIImage

我在Swift編程。 我想使用CALayer和UIImage來屏蔽圖像。 我正在以編程方式創建我的蒙版圖像。 創建的蒙版圖像是一個UIImage,當我自己查看它時工作正常。 但當我用它作為面具時,整個屏幕變成白色。 我懷疑我的問題在於配置CALayer對象。 我很感激你的幫助。 謝謝!

class ViewController: UIViewController {

    @IBOutlet weak var imageView: UIImageView!

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        var maskImageSize = CGSizeMake(self.imageView.frame.width, self.imageView.frame.height)
        UIGraphicsBeginImageContextWithOptions(maskImageSize, false, 0.0)

        var color = UIColor(white: 1.0, alpha: 1.0)
        color.setFill()
        var rect = CGRectMake(0, 0, self.imageView.frame.width, self.imageView.frame.height)
        UIRectFill(rect)

        color = UIColor(white: 0.0, alpha: 1.0)
        color.setFill()
        rect = CGRectMake((self.imageView.frame.width/2)-100, (self.imageView.frame.height/2)-100, 200, 200)
        UIRectFill(rect)

        var maskImage = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()

        var maskLayer = CALayer()
        maskLayer.contents = maskImage
        maskLayer.contentsRect = CGRectMake(0, 0, self.imageView.bounds.width, self.imageView.bounds.height)


        self.imageView.image = UIImage(named: "pictobemasked.png")

        self.imageView.layer.mask = maskLayer;
    }

}

不幸的是,你問的問題相當糟糕 - 你還沒有說出你真正想要的是什么! 但是,看起來好像你可能試圖使用蒙版在圖像視圖中打出一個矩形孔。 如果是這樣,您的代碼至少有三個巨大的缺陷。

  • 您的代碼不起作用的一個原因是掩碼基於透明度而不是顏色。 你使用的是不透明的白色和不透明的黑色,它們都是不透明的,所以沒有區別。 你需要兩種顏色:

      var color = UIColor(white: 1.0, alpha: 1.0) // ... and then, later ... color = UIColor(white: 1.0, alpha: 0.0) 
  • 第二個問題是您的圖層沒有大小。 你需要給它一個:

     var maskLayer = CALayer() maskLayer.frame = CGRectMake( 0, 0, self.imageView.bounds.width, self.imageView.bounds.height) 
  • 第三個也是最大的問題是你的面具圖像永遠不會進入你的面具層,因為你忘了提取它的CGImage

     maskLayer.contents = maskImage.CGImage 

最后一個真的是殺手,因為如果你在沒有提取CGImage情況下將contents設置為UIImage,那么圖像會無聲地進入圖層。 沒有錯誤消息,沒有崩潰 - 也沒有圖像。

在你的代碼中進行了這三個修正,我能夠使掩模在圖像中打出一個矩形孔。 因此,如果這是您的目的,那么這些變化將實現它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM