Ios 我看到大约1FPS试图在两个375x667图像上使用CoreImage CIFlashTransition,我能做些什么来加快速度?

Ios 我看到大约1FPS试图在两个375x667图像上使用CoreImage CIFlashTransition,我能做些什么来加快速度?,ios,animation,core-image,Ios,Animation,Core Image,我将两个不起眼的UIView捕捉为不透明图像,并尝试使用CIFlashTransition设置过渡动画。我得到的东西真的很像1FPS。我是在做一些愚蠢的事情,还是我不应该期望CoreImage的动画级性能 过滤器和CALayer在Swift中设置,CALayer子类为ObjC 过滤器设置如下所示: let extent = CIVector(x: 0, y: 0, z: sourceView.frame.size.width, w: sourceView.frame.size.height) f

我将两个不起眼的UIView捕捉为不透明图像,并尝试使用CIFlashTransition设置过渡动画。我得到的东西真的很像1FPS。我是在做一些愚蠢的事情,还是我不应该期望CoreImage的动画级性能

过滤器和CALayer在Swift中设置,CALayer子类为ObjC

过滤器设置如下所示:

let extent = CIVector(x: 0, y: 0, z: sourceView.frame.size.width, w: sourceView.frame.size.height)
filter.setDefaults()
filter.setValue(extent, forKey: kCIInputExtentKey)
filter.setValue(CIColor(red: 0, green: 0, blue: 0), forKey: kCIInputColorKey)
filter.setValue(self.sourceView.renderImage().CIImageRenderIfNeeded(), forKey: kCIInputImageKey)
filter.setValue(self.destinationView.renderImage().CIImageRenderIfNeeded(), forKey: kCIInputTargetImageKey)
filter.setValue(0.0, forKey: kCIInputTimeKey)
self.displayLayer = CACITransitionLayer(layer: self.animationView.layer, transitionFilter: filter)
self.displayLayer.frame = self.animationView.bounds
self.displayLayer.bounds = self.animationView.bounds
self.displayLayer.backgroundColor = UIColor(hue: 0.3, saturation: 0.7, brightness: 0.7, alpha: 0.4).CGColor
self.displayLayer.time = 1.0
self.animationView.layer.addSublayer(self.displayLayer)
该层看起来像:

let extent = CIVector(x: 0, y: 0, z: sourceView.frame.size.width, w: sourceView.frame.size.height)
filter.setDefaults()
filter.setValue(extent, forKey: kCIInputExtentKey)
filter.setValue(CIColor(red: 0, green: 0, blue: 0), forKey: kCIInputColorKey)
filter.setValue(self.sourceView.renderImage().CIImageRenderIfNeeded(), forKey: kCIInputImageKey)
filter.setValue(self.destinationView.renderImage().CIImageRenderIfNeeded(), forKey: kCIInputTargetImageKey)
filter.setValue(0.0, forKey: kCIInputTimeKey)
self.displayLayer = CACITransitionLayer(layer: self.animationView.layer, transitionFilter: filter)
self.displayLayer.frame = self.animationView.bounds
self.displayLayer.bounds = self.animationView.bounds
self.displayLayer.backgroundColor = UIColor(hue: 0.3, saturation: 0.7, brightness: 0.7, alpha: 0.4).CGColor
self.displayLayer.time = 1.0
self.animationView.layer.addSublayer(self.displayLayer)
CACITransitionLayer标头非常简单:

#import <Foundation/Foundation.h>
#import <CoreImage/CoreImage.h>
#import <QuartzCore/QuartzCore.h>

@interface CACITransitionLayer : CALayer

- (instancetype)initWithLayer:(id)layer transitionFilter:(CIFilter*)filter;


@property (nonatomic, assign) CGFloat time;
@property (nonatomic, strong) CIFilter *transitionFilter;
@property (nonatomic, strong) CIContext *context;

@end

性能很可能很慢,因为您正在使用CI在每个渲染上创建CGImage。您是否可以重新转换视图,以便为CI提供一个要渲染的EAGLContext?

而不是在每次显示调用中重新创建UseFulfillateDimage,而是让您创建一次,然后在[drawInContext:]中将其绘制到上下文中?UseFulfillateDimage随时间KCIIInputTime的变化而变化