Swift 如何将遮罩与图像对齐

Swift 如何将遮罩与图像对齐,swift,uiimage,calayer,masking,Swift,Uiimage,Calayer,Masking,我在用Swift写文章,试图用UIImage和CALayer屏蔽一个图像。问题在于,当应用于图像时,遮罩会缩放和移动。我已经使用Interface Builder创建了UIImageViewer,并将其设置为Aspect Fit。我想屏蔽任意大小的图像。我生成的遮罩图像与图像大小相同。这是一个要求,因为以后我想以编程方式向掩码添加更多元素,并且它必须覆盖掩码图像。这是我的密码: class ViewController: UIViewController { @IBOutlet weak va

我在用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不允许我发布它们,因为我没有足够的声誉

这里的问题是,如果使用aspect fit,则显示的图像大小取决于原始图像的大小和图像视图的大小。你试图做的是模仿图像视图对图像的作用,而你无法确切知道这是什么


你能做的就是猜测。您要查找的是最大矩形的大小,该矩形将适合图像视图的边界,同时保持原始图像的纵横比。如果您导入AV基础框架,就有一个方便的函数给您这个信息,<代码> avaMekExtAsExpReToToRosiInEngs(这里记录:)< /P> < P>我也面临同样的问题,我将它固定在UIIVIEVIEW的实用工具中。在绘图部分,我只需检查剪辑子视图 这样地


问题解决了

将屏幕截图张贴到其他地方,如imgur,并添加问题的链接。有人(嘿嘿)会过来,把实际的图片放到你的问题中。这里是我的面具图片、原始图片和最终图片的链接:谢谢马特!非常感谢。我查一下。这项工作比我想象的要困难。我想如果我使图像遮罩与原始图像的大小相同,那么通过aspect fit参数对原始图像产生的任何影响也会对遮罩图像产生影响!不,想想看。遮罩是图像视图的一层。这并不是我们想要的。什么是得到方面适合的是图像。UIImageView不是UIImageView。还有5天就要完成项目了,现在是新年,我不得不重新思考我的问题:)谢谢马特,新年快乐!就我个人而言,我甚至还不明白你到底想做什么。所有关于面具的讨论。。。我只是在谈论遮罩和纵横比,因为你们在谈论它们。如果我知道你真正的目标是什么,也许我可以推荐一种完全不同的方式。但在你的问题中,你从来不说(即使我问过你)你实际上想做什么。