目标c - 在图像上滑动图像/滤镜

时间:2016-05-05 16:49:00

标签: ios objective-c uiimageview uiimage

我正在尝试将过滤器或应用了过滤器的图像滑过另一张图像。我已经包含了一个我正在尝试做的事情的视频Snap chat filter example

目前我有一个带有原始图像的UIView(self.mainImage.image),我使用以下代码创建了一个过滤器:

- (void)applyBWFilter {
    UIImage *img = [_images peak];

    // Add B&W filter
    // Create image rectangle with current image width/height
    CGRect imageRect = CGRectMake(0, 0, img.size.width, img.size.height);

    // Grayscale color space
    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceGray();

    // Create bitmap content with current image size and grayscale colorspace
    CGContextRef context = CGBitmapContextCreate(nil, img.size.width, img.size.height, 8, 0, colorSpace, kCGImageAlphaNone);

    // Draw image into current context, with specified rectangle
    // using previously defined context (with grayscale colorspace)
    CGContextDrawImage(context, imageRect, [img CGImage]);

    // Create bitmap image info from pixel data in current context
    CGImageRef imageRef = CGBitmapContextCreateImage(context);

    // Create a new UIImage object
    self.mainImage.image = [UIImage imageWithCGImage:imageRef];

    // Release colorspace, context and bitmap information
    CGColorSpaceRelease(colorSpace);
    CGContextRelease(context);
    CFRelease(imageRef);
}

如何让新图像像示例一样滑过旧图像?

1 个答案:

答案 0 :(得分:0)

有很多方法可以做到这一点。可能最简单的方法是首先生成替换图像。然后将其安装在图像视图中并将其放在现有图像视图的顶部。添加与新的过滤图像大小相同的CAShapeLayer,作为“过滤器应用”图像视图的遮罩层。从形状图层开始为空。添加一个不透明的矩形UIBezierPath的CGPath作为形状图层中的形状,但是矩形的位置在屏幕外移动,因此它不可见。

最后,在移动矩形路径以填充图像内容时,为形状图层设置更改动画。

空形图层将完全遮盖图像以开始。当您将不透明的矩形形状设置为适当的位置时,它会将过滤后的图像显示为视图中的动画。