Eha*_*mer 2 objective-c uiscrollview uiimageview ios7
我一直在寻找一段时间,并试图完成类似的事情.在Fifa iOS应用程序中,有一个非常奇特的效果,你可以在屏幕之间滚动,每个都有一个不同的图像,但滚动本身不移动图像移动,但像它们之间的裁剪线移动(视差效果,如在一些网站).
我的问题是:我尝试了类似的效果,但遇到了2个障碍.掩模图像CGImageMaskCreate
不够快,无法正确裁剪图像.
我尝试的是加载出现在屏幕上的3个裁剪图像,这意味着graphicsContexts
为3个蒙版中的每个创建3个图像,为每个蒙版屏蔽图像.然后,创建另一个缓冲区上下文,我将完成的部分加起来(创建3次,每次裁剪后的图像一次,然后我开始处理下一个)这是有意义的,它是重的,它是.
第二,我尝试了GPUImage库,但它感觉非常慢,我最小化了很多我正在使用的GraphicsContexts.我肯定做了一件非常糟糕的事,但我不确定从哪里开始.我找不到任何可以执行类似调整的示例代码.我决定炸掉我正在尝试的现有代码,所以我会重新开始(所以不要问我代码:D)
我知道这样scrollViewDidScroll
的事情可以很流畅.
您应该将图像视图剪辑/遮罩到路径而不是图像蒙版.然后,在平移时,图像不会移动,而是只更新每个图像视图的剪辑/蒙版.如果你想要做的是,在核芯显卡,您可以创建一个路径CGContextMoveToPoint
,CGContextAddLineToPoint
等等,再夹使用CGContextClip
.
如果你想在QuartzCore中执行此操作,可以使用a CAShapeLayer
作为相应图像视图的掩码,为每个图像赋予自己的每个掩码UIBezierPath
:
// create path
UIBezierPath *path = [UIBezierPath bezierPath];;
CGPoint point = CGPointZero;
point.x += slantOffset;
[path moveToPoint:point];
point.x += self.view.bounds.size.width;
[path addLineToPoint:point];
point.x -= slantOffset * 2.0;
point.y += self.view.bounds.size.height;
[path addLineToPoint:point];
point.x -= self.view.bounds.size.width;
[path addLineToPoint:point];
[path closePath];
// create shape layer, use the path, and specify it for the mask of the image view
CAShapeLayer *maskLayer = [CAShapeLayer layer];
maskLayer.path = [path CGPath];
self.imageView.layer.mask = maskLayer;
Run Code Online (Sandbox Code Playgroud)
当您想要更改蒙版时(例如在平移手势识别器中),您可以更新path
为maskLayer
.只需对任何给定时间可见的所有图像重复此过程(例如,看起来这个应用程序有三个一次可见的图像).
这足以让您跟上手势识别器和/或自定义转换的速度.这里我有三个图像视图,我有一个手势识别器更新UIBezierpath
三个图像视图中每个图像视图的相应遮罩层.显然,图层蒙版的路径会相应调整(左,中,右),但我怀疑你有这个想法:
归档时间: |
|
查看次数: |
731 次 |
最近记录: |