Iphone 在iOS上,自定义视图赢得';你不动吗?
在新的单视图应用程序中,显示以下代码:Iphone 在iOS上,自定义视图赢得';你不动吗?,iphone,ios,uiview,core-animation,uiviewanimation,Iphone,Ios,Uiview,Core Animation,Uiviewanimation,在新的单视图应用程序中,显示以下代码: - (void)viewDidAppear:(BOOL)animated { self.fooView = [[UIView alloc] initWithFrame:CGRectMake(100, 100, 200, 200)]; self.fooView.backgroundColor = [UIColor yellowColor]; [self.view addSubview:self.fooView]; [UIVi
- (void)viewDidAppear:(BOOL)animated {
self.fooView = [[UIView alloc] initWithFrame:CGRectMake(100, 100, 200, 200)];
self.fooView.backgroundColor = [UIColor yellowColor];
[self.view addSubview:self.fooView];
[UIView animateWithDuration:2 animations:^{
self.fooView.backgroundColor = [UIColor blueColor];
}];
}
将黄色背景设置为蓝色。fooView
只是:
@property (strong, nonatomic) UIView *fooView;
但是如果定义了一个自定义视图类FooView
,并且我通过将UIView
替换为FooView
来更改上面的代码,并且还为FooView
定义了一个空的-drawRect
,那么就不会有动画了——背景立即变为蓝色
如果使用[UIView animateWithDuration:…]
或[FooView animateWithDuration:…]
,则没有区别——这不是动画
如果在-drawRect
内,我调用[super-drawRect:rect]代码>,则是同一件事:没有动画
如果我将drawRect
更改为drawRect2
,或者如果我删除了整个方法,则动画将正常工作
(例如,可能需要-drawRect
,如果我们需要在自定义视图FooView中绘制一个圆怎么办?)
为什么呢?除了给出如何使其即使与-drawRect
一起工作的解决方案外,请解释是什么原因使其无法进行动画制作?使用“CATTransition”类。您必须进行动画制作。
使用这种方法
+(CAAnimation*)设置动画{}在动画块中使用以下行
[self.view addSubview:self.fooView]drawRect的出现:改变UIView的操作方式。您应该只在绝对必要时使用drawRect:并且您永远不应该有一个空的drawRect:实现
如果子类中存在-drawRect:方法,那么UIView在调用此方法之前必须做很多事情。也就是说,它必须分配一个可能非常昂贵的支持存储,自定义图形将出现在该支持存储中,并且必须使用背景色填充该支持存储
然后,UIView将调用drawRect:implementation,在将备份存储交给GPU之前,对备份存储执行任何自定义绘图。只有在所有这些之后,动画块才会开始运行
因此,在动画开始时,表示自定义UIView的后台存储已绘制为新的背景色
如果UIView子类没有drawRect:method,则视图没有后备存储。背景颜色由GPU直接处理,GPU可以非常有效地设置颜色之间转换的动画
空UIView对象(没有drawRect:implementation)相当轻量级。自定义视图应由多个子视图组成,具体取决于要实现的动画效果
例如,UITableViewCell类由许多子视图组成。UITableViewCell本身就是一个UIView。它包含背景视图和选定的背景视图。最上面是内容视图,内容视图内部是各种文本标签和图像视图。所有这些视图组合在一起,生成您在常规UITableView中看到的选择和调整动画大小。相反,我们必须创建一个新类,使用CATTransition并使用此类方法“+(CAAnimation*)setAnimation”。我们必须为此创建一个对象,并在发生转换时调用该对象。检查此链接[ [1]: