核心图形绘制的核心动画

问题描述:

我在一个UIView子类(下面的代码中的CustomView)中。核心图形绘制的核心动画

我在UIImageView子类(containerView)中的图像周围绘制边框。此核心图形代码位于子类中的drawInRect:的内部。

核心动画过渡是翻转过程,但是当绘制时,不使用核心图形代码,即不调用drawInRect:来为CALayer提供我的渲染图像。

相反,我从一个图像获取动画到另一个没有任何Core Graphics绘图发生。

如何让CALayer使用我的Core Graphics绘图而不是原始图像进行动画制作?

[CustomView beginAnimations:@"transitionNextImage" context:nil]; 
[CustomView setAnimationDuration:2.0]; 
[containerView setImage:image]; 
[CustomView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft forView:containerView cache:YES]; 
[containerView setImage:differentImage]; 
[CustomView commitAnimations]; 

你实现drawRect:,不drawInRect:,对不对?另外,你是否证实了在这个转换之外,它实际上起作用了?

你能否粘贴你的drawRect:执行?我只是担心UIImageView直接设置其图层的内容,而不是依靠drawRect:来完成,这意味着您的drawRect:不起作用。

实际上,考虑到这个实际是多么的简单,我建议你只需要UIView的子类而不是UIImageView。缩放图像进行绘制时保留宽高比的数学运算非常简单。

当然,另一种选择是继承UIImageView,然后重写setImage:以创建一个基于第一个图像的新图像,然后在该图像上绘制边框,然后将其传递给super。这样,你根本不需要用drawRect:做任何事情。

好的,是的,我实施drawRect:,是的,我的绘图工作过渡之外。

问题是UIImageView子类中的drawRect:未被CALayer调用。

所以当我将这个子类的父母切换到UIView时,为图像实现了我自己的属性,并且调整了动画 - 所有东西都聚集在一起。

上述代码中动画的containerView被改为香草UIView实例。动画代码必须稍微改变以适应此:

[CustomView beginAnimations:@"transitionNextImage" context:nil]; 
[CustomView setAnimationDuration:2.0]; 
[containerView addSubview:aViewSubclass]; 
[CustomView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft forView:containerView cache:YES]; 
[aViewSubclass removeFromSuperview]; 
[containerView addSubview:anotherInstanceOfTheViewSubclass]; 
[CustomView commitAnimations]; 

即,从苹果对这类过渡的文档:

如果你想有一个过渡的 例如在更改视图的外观 ,翻转从一个视图到 另一个,然后使用一个容器视图,一个 UIView的实例如下:

  1. 开始一个动画块。
  2. 设置容器视图上的转换。
  3. 从容器视图中删除子视图。
  4. 将新的子视图添加到容器视图。
  5. 提交动画块。