我在一个UIView子类(下面代码中的CustomView)中。
我在一个UIImageView子类(containerView)中的图像周围绘制了一个边框。它的核心图形代码位于子类的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];发布于 2009-01-14 11:20:08
你实现的是drawRect:,而不是drawInRect:,对吧?此外,您是否验证了在此过渡之外,它实际上是有效的?
你能粘贴你的drawRect:实现吗?我只是担心UIImageView直接设置它的层的内容,而不是依靠drawRect:来做,这将意味着你的drawRect:不能工作。
事实上,考虑到这实际上是多么简单,我建议您只创建UIView子类而不是UIImageView子类。在缩放图像以进行绘图时,保留宽高比的数学方法非常简单。
当然,另一种选择是子类化UIImageView,然后覆盖setImage:,在第一个图像的基础上创建一个新图像,但在第一个图像周围绘制一个边框,然后将其传递给super.这样一来,你根本就不需要对drawRect:做任何事情。
发布于 2009-01-15 08:09:16
好吧,是的,我实现了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的实例,如下所示:
https://stackoverflow.com/questions/442326
复制相似问题