我正在使用Swift 1.2,我的目标是在静态UIImage上动画显示一个图像蒙版。我实现的是我最初在Objective-C中找到的图像蒙版的Swift版本。
func maskImage(image: UIImage, mask: UIImage) -> UIImage! {
let maskRef = mask.CGImage;
let mask = CGImageMaskCreate(
CGImageGetWidth(maskRef),
CGImageGetHeight(maskRef),
CGImageGetBitsPerComponent(maskRef),
CGImageGetBitsPerPixel(maskRef),
CGImageGetBytesPerRow(maskRef),
CGImageGetDataProvider(maskRef), nil, false);
let masked = CGImageCreateWithMask(image.CGImage, mask);
let retImage = UIImage(CGImage: masked);
return retImage;
}
这很好!但是,让它动起来是我的难点。
有没有一种方法可以迭代地应用具有不同水平偏移量的蒙版,或者有更好的方法来解决这个问题 - 或许可以使用CALayer实现?
感谢您的帮助!
编辑:根据已发布的答案,我添加了以下内容:
let image = UIImage(named: "clouds");
let imageView = UIImageView(image: image);
let layer = CALayer();
layer.contents = UIImage(named: "alpha-mask")?.CGImage;
layer.bounds = CGRectMake(0, 0, image.size.width, image.size.height);
// For other folks learning, this did not work
//let animation = CABasicAnimation(keyPath: "bounds.origin.x");
// This does work
let animation = CABasicAnimation(keyPath: "position.x");
animation.duration = 2;
animation.delegate = self;
animation.fillMode = kCAFillModeForwards;
animation.repeatCount = 0;
animation.fromValue = 0.0;
animation.toValue = image.size.width;
animation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionLinear);
animation.removedOnCompletion = false;
layer.addAnimation(animation, forKey: "transform");
imageView.layer.mask = layer;
self.addSubview(imageView);
我能够正确地看到alpha遮罩,但是动画不起作用。有什么想法吗? 编辑:我修改了上面的代码,现在它可以工作了!我需要把keyPath改成position.x。请参考上面的内容。