核心图形绘制的核心动画
我在一个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的实例如下:
- 开始一个动画块。
- 设置容器视图上的转换。
- 从容器视图中删除子视图。
- 将新的子视图添加到容器视图。
- 提交动画块。