基于 OpenGL 的 iOS 转换。基于 GPUImage。
YUGLTransition 是一个库,允许您创建基于 GPU 的 UIView 和 UIViewController 转换。
渲染部分使用 GPUImage。
有一些现成的转换效果,如涟漪、交换、门、闪光、飞眼等。它还允许您通过提供自定义转换过滤器来创建自己的自定义转换。
目前有六个预设转换过滤器:YUGLCrossDissolveTransitionFilter
YUGLFlashTransitionFilter
YUGLFlyeyeTransitionFilter
YUGLRippleTransitionFilter
YUGLSwapTransitionFilter
YUGLDoorwayTransitionFilter
大多数预设过滤器都是从 glsl-transtion(一个使用 WebGL Shaders 执行转换的 JavaScript 库)移植的。您可以在这里查看转换的演示。
您可以通过子类化 GPUImageFilter
、提供您的转换着色器并确认符合 YUGLTransitionFilter
协议来创建自己的转换过滤器。该协议只有一个属性:progress
。所有预设过滤器都是很好的示例。
欢迎为新的转换过滤器提交拉取请求。
性能因设备和所选过滤器(您编写的自定义着色器)而异。
例如,iPhone 4 能够使用闪光转换过滤器执行全屏转换,但是它很难使用交换过滤器进行转换。
一般来说,iPhone 4s 能够处理该项目中目前的所有转换过滤器。
注意:与模拟器相比,实际设备上的转换性能通常会提高。
使用 YUGLViewTransition
创建视图转换。
[YUGLViewTransition transitionWithView:self.imageView
duration:1.0
transitionFilter:[[YUGLFlashTransitionFilter alloc] init]
timingFunction:nil
reversed:NO
animations:^{
self.imageView.image = nextImage;
} completion:^(BOOL finished) {
NSLog(@"transition completed.");
}];
view
:转换发生的 UIView 对象。
duration
:转换持续时间。
transitionFilter
:一个用于渲染转换的 GPUImageOutput<GPUImageInput,YUGLTransitionFilter>
对象(基本上是一个 GPUImageFilter
)。
timingFunction
:一个控制转换动画曲线的 YUMediaTimingFunction
对象。就像 CAMediaTimingFunction
。
reversed
:指示是否应使用过渡的逆版本。
animations
:一个包含提交给view
的更改的块对象。
completion
:一个块对象,用于过渡结束时执行。
使用YUGLViewControllerTransition
创建视图控制器之间的过渡。
YUGLViewControllerTransition
只是一个确认遵循UIViewControllerAnimatedTransitioning
协议的类。您可以在视图控制器过渡过程中使用这个类。有关UIViewControllerAnimatedTransitioning
的更多信息,请参阅[Apple的文档](https://developer.apple.com/library/ios/documentation/uikit/reference/UIViewControllerAnimatedTransitioning_Protocol/Reference/Reference.html)。
如果您发现一个错误并且确切知道如何修复它,请提出一个pull请求。如果您无法自行进行更改,请在确认没有已记录的错误后,请提出一个问题。