我想將聊天泡泡遮罩應用於圖像視圖,並且我希望將遮罩圖像縮放以適合圖像視圖的框架。這是我用來創建和敷面膜代碼:如何防止UIImageView遮罩的裁剪
let mask = CALayer()
let maskImage = UIImage(named: "chatGif")!
mask.contents = maskImage.CGImage
mask.frame = CGRectMake(0, 0, imageView.frame.width, imageView.frame.height)
imageView.layer.mask = mask
imageView.layer.masksToBounds = true
這是我的面具:
然而,這是我所得到的:
當我添加切片蒙版圖像(即創建可調整大小的帽子插圖)我得到這個:
我犯了一個很小的項目,證明這個問題,並把它here
我沒有從根本上理解,爲什麼我的掩模圖像的右邊和底邊越來越切出的視圖。蒙版的邊框和邊界與圖像視圖相匹配,用於蒙版的圖像實際上比圖像視圖更小,因此如果有任何內容,我希望它不會覆蓋整個內容,而不是部分修剪。
有人能解釋一下這裏發生了什麼嗎?我如何防止這種行爲?
編輯:我一直是這樣一些玩耍,結果使一些更有意義的時候我設置了蒙版的尺寸相匹配,像這樣的maskImage
大小:
let mask = CALayer()
let maskImage = UIImage(named: "chatGif")!
mask.contents = maskImage.CGImage
mask.frame = CGRectMake(0, 0, maskImage.size.width, maskImage.size.height)
imageView.layer.mask = mask
imageView.layer.masksToBounds = true
這給了我:
或者在光罩資產切片,我得到了J.Hunter的答案圖像。這仍然不是我想要的,因爲面具沒有被拉伸以填充imageView
,並且圍繞雙方的很大一部分被掩蓋掉了,這不應該是,但我至少可以理解在這種情況下發生的事情。我將面罩的框架設置爲比imageView的框架更小的尺寸,因此它當然不會填滿整個區域。
但是我期望設置掩碼的框架與imageView
匹配的框架將使掩碼的右邊緣和底邊緣在最後一個屏幕截圖中與imageView
的右邊緣和底邊緣對齊。如果我打印出口罩的框架,邊界和contentsRect
,它們正是我所期望的:框架和邊界匹配imageView
和contentsRect
是(0.0, 0.0, 1.0, 1.0)
。我的理解是,CALayer
將基於contentsRect
顯示其部分內容,因此除非該rect小於1.0x1.0,否則應顯示整個內容圖像。對?但爲什麼這不是我所看到的?
也許[這個線程](http://stackoverflow.com/questions/5757386/how-to-mask-an-uiimageview)可以幫助你 –
不幸的是,我不能使用'CGImageCreateWithMask'方法,因爲在我的實際項目中我我正在使用'FLAnimatedImageView'來顯示gif,所以掩碼需要在'UIImageView'層,而不是'UIImage'層。 – NewShelbyWoo