【发布时间】:2014-12-31 00:26:02
【问题描述】:
我正在用 Swift 编写代码,尝试使用 UIImage 和 CALayer 屏蔽图像。问题是蒙版在应用于图像时会被缩放和移动。我使用 Interface Builder 创建了 UIImageViewer,并将其设置为 Aspect Fit。我想屏蔽任意大小的图像。我生成的蒙版图像与图像大小相同。这是一个要求,因为稍后我想以编程方式向我的蒙版添加更多元素,并且它必须覆盖蒙版图像。这是我的代码:
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 img = UIImage(named: "flowers.png")
var maskImageSize = CGSizeMake(img!.size.width, img!.size.height)
UIGraphicsBeginImageContextWithOptions(maskImageSize, false, 0.0)
var color = UIColor(white: 1.0, alpha: 0.0)
color.setFill()
var rect = CGRectMake(0, 0, img!.size.width, img!.size.height)
UIRectFill(rect)
color = UIColor(white: 0.0, alpha: 1.0)
color.setFill()
rect = CGRectMake((img!.size.width/2)-50, (img!.size.height/2)-50, 100, 100)
UIRectFill(rect)
var maskImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
var maskLayer = CALayer()
maskLayer.frame = self.imageView.layer.bounds // it'll have the same problem if I set it to self.imageView.layer.frame
maskLayer.contents = maskImage.CGImage
maskLayer.contentsGravity = kCAGravityCenter
self.imageView.image = img
self.imageView.layer.mask = maskLayer;
self.imageView.layer.masksToBounds = true
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
我需要知道如何将图像蒙版与原始图像对齐。感谢您的帮助!
我有很好的屏幕截图,但 Stackoverflow 不允许我发布它们,因为我没有足够的声誉!
【问题讨论】:
-
将屏幕截图发布到其他地方,例如 imgur,并添加指向您问题的链接。有人(呵呵)会过来把实际的图片放到你的问题中。
-
这里是我的蒙版图像、原始图像和结果图像的链接:imgur.com/IPXwkESimgur.com/jip5PWcimgur.com/0QPtcOW谢谢马特!
标签: swift uiimage calayer masking