在我看来,这两个类方法是不能互换的。我有一个UIView的子视图,在touchesBegan方法中使用以下代码:
if (!highlightView) {
UIImageView *tempImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"Highlight"]];
self.highlightView = tempImageView;
[tempImageView release];
[self addSubview:highlightView];
}
highlightView.alpha = 0.0;
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:0.5];
highlightView.alpha = 1.0;
[UIView commitAnimations];
我点击按钮时,高亮效果会出现,这是预期的行为。如果在动画完成前立即松开,我的touchesEnded方法就会被调用,这正是我想要的行为。
但是现在,我成了块的忠实粉丝,并尽可能地使用它们。因此,我用以下代码替换了UIView动画代码:
[UIView animateWithDuration:0.2 animations:^{ highlightView.alpha = 1.0;}];
结果:高亮仍按预期淡入,但如果在动画完成之前进行触摸,我的touchesEnded将不会被调用。如果我在动画完成后松开触摸,我的touchesEnded将被调用。这是怎么回事?