Cocoa touch 具有核心图形绘图的核心动画
我在UIView子类(下面代码中的CustomView)中 我正在UIImageView子类(containerView)中的图像周围绘制边框。该类的核心图形代码位于子类的Cocoa touch 具有核心图形绘图的核心动画,cocoa-touch,core-animation,core-graphics,Cocoa Touch,Core Animation,Core Graphics,我在UIView子类(下面代码中的CustomView)中 我正在UIImageView子类(containerView)中的图像周围绘制边框。该类的核心图形代码位于子类的drawInRect:中 核心动画过渡是翻转,但在绘制时,不会使用核心图形代码,即不会调用drawInRect:为CALayer提供渲染图像 相反,我得到的动画从一个图像到另一个没有任何核心图形绘制发生 如何允许CALayer使用我的核心图形绘制而不是原始图像来设置动画 [CustomView beginAnimations:
drawInRect:
中
核心动画过渡是翻转,但在绘制时,不会使用核心图形代码,即不会调用drawInRect:
为CALayer提供渲染图像
相反,我得到的动画从一个图像到另一个没有任何核心图形绘制发生
如何允许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];
您正在实现
drawRect:
,而不是drawInRect:
,对吗?另外,您是否验证了在这个转换之外,它实际上是有效的
你能粘贴你的drawRect:
实现吗?我只是担心UIImageView直接设置其层的内容,而不是依赖drawRect:
来完成,这意味着您的drawRect:
无法工作
事实上,考虑到这实际上是多么简单,我建议您将UIView子类化,而不是UIImageView。在为绘图缩放图像时,保持纵横比的数学方法非常简单
当然,另一个选项是将UIImageView子类化,然后重写
setImage:
,以基于第一个图像创建新图像,但在其周围绘制边框,然后将其传递给super。这样,您就不必对drawRect:
做任何事情。好的,是的,我实现了drawRect:
,是的,我的绘图在转换之外工作
问题是,CALayer没有为图形调用UIImageView
子类中的drawRect:
因此,当我将这个子类的父类切换到UIView
时,实现了我自己的图像属性,并调整了动画-所有内容都在一起
上面代码中动画的containerView
已更改为vanillaUIView
实例。动画代码必须稍微更改以适应以下情况:
[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的实例,如下所示: