我想将聊天泡泡遮罩应用于图像视图,并且我希望将遮罩图像缩放以适合图像视图的框架。这是我用来创建和敷面膜代码:如何防止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