我在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];
答案 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)
您正在实施drawRect:
,而不是drawInRect:
,对吗?另外,您是否已经确认在此转换之外,它确实有效?
您可以粘贴drawRect:
实施吗?我只是害怕UIImageView直接设置其图层的内容,而不是依靠drawRect:
来做,这意味着你的drawRect:
不起作用。
事实上,考虑到这实际上是多么简单,我建议你只是UIView的子类而不是UIImageView。缩放图像以进行绘制时保留纵横比的算法非常简单。
另一个选择当然是子类UIImageView,然后只是覆盖setImage:
来创建一个基于第一个的新图像,但是围绕它绘制一个边框,然后将其传递给super。这样,您就不必对drawRect:
执行任何操作。