核心动画与核心图形绘图

时间:2009-01-14 08:58:04

标签: cocoa-touch core-animation core-graphics

我在UIView子类中(下面的代码中的CustomView)。

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

Core Animation转换是一个翻转,但是在绘制时,不使用Core Graphics代码,即不调用drawInRect:来为CALayer提供我渲染的图像。

相反,我将动画从一个图像传到另一个图像而没有任何Core Graphics绘图。

如何使用我的核心图形绘图而不是原始图像来允许CALayer动画化?

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

2 个答案:

答案 0 :(得分:3)

好的是我正在实施drawRect:,是的,我的绘图在转换之外工作。

问题是CALayer没有为drawRect:子类调用UIImageView子类中的UIView

因此,当我将此子类的父级切换为containerView时,为图像实现了我自己的属性,并调整了动画 - 所有内容都汇集在一起​​。

上面代码中的动画UIView已更改为vanilla [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]; 实例。必须稍微更改动画代码以适应这一点:

{{1}}

即。来自Apple关于这些转变的文档:

  

如果要更改外观   过渡期间的观点   例如,从一个视图翻转到   另一个 - 然后使用容器视图,一个   UIView的实例,如下:

     
      
  1. 开始动画块。
  2.   
  3. 在容器视图上设置转场。
  4.   
  5. 从容器视图中删除子视图。
  6.   
  7. 将新子视图添加到容器视图中。
  8.   
  9. 提交动画块。
  10.   

答案 1 :(得分:2)

您正在实施drawRect:,而不是drawInRect:,对吗?另外,您是否已经确认在此转换之外,它确实有效?

您可以粘贴drawRect:实施吗?我只是害怕UIImageView直接设置其图层的内容,而不是依靠drawRect:来做,这意味着你的drawRect:不起作用。

事实上,考虑到这实际上是多么简单,我建议你只是UIView的子类而不是UIImageView。缩放图像以进行绘制时保留纵横比的算法非常简单。

另一个选择当然是子类UIImageView,然后只是覆盖setImage:来创建一个基于第一个的新图像,但是围绕它绘制一个边框,然后将其传递给super。这样,您就不必对drawRect:执行任何操作。