在一个新的单视图应用程序中,下面的代码:
但是,如果定义了一个自定义视图类`FooView`,并将上述代码中的`UIView`替换为`FooView`,还为`FooView`定义了一个空的`-drawRect`,那么就不会有动画效果--背景色只会立即变为蓝色。
使用`[UIView animateWithDuration:...]`或者`[FooView animateWithDuration:...]`没有任何区别--依然没有动画效果。
如果在`-drawRect`中调用`[super drawRect:rect];`,那么也一样:没有动画效果。
如果将`drawRect`改为`drawRect2`,或者移除整个方法,则动画效果会正常工作。
(而`-drawRect`可能是必需的,例如,假设我们需要在自定义视图`FooView`中绘制一个圆形?)
为什么会这样?除了提供如何使其即使带有`-drawRect`也能正常工作的解决方案外,请解释一下发生了什么导致它没有动画效果?
- (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`也能正常工作的解决方案外,请解释一下发生了什么导致它没有动画效果?