我试图制作一个自定义视图,其中一个元素(UILabel)具有动画,当点击自定义视图的按钮时,标签应该展开然后收缩。动画的第一部分正确发生,但不是第二部分。我使用这种方法。使用动画创建自定义视图
[UIView animateWithDuration:1.3 animations:^{
CGRect frame = CGRectMake(50, 15, 140, 20);
[labelFav setFrame:frame];
} completion:^(BOOL finished) {
//[labelFav setHidden:YES];
[UIView animateWithDuration:1.3 animations:^{
CGRect frame = CGRectMake(50, 15, 0, 20);
[labelFav setFrame:frame];
}];
}];
我相信这是如何实现Refresh和LayoutSubviews方法的问题。 我做了以下这个教程,ray wenderlinch
问题是当第一动画被称为后,LayoutSubviews被调用,因此,所有的项目都设置到初始位置,并且当第一动画结束后第二个开始但项目设置为原始状态,所以我相信动画不会发生,因为动画之间有变化。
我想知道如何正确实施,你能帮我一把吗?
谢谢。 PS:这是关于同一个问题的第二个问题,但是角度不同。 my previous question
[更新]
这是我LayoutSubviews代码:
- (void)layoutSubviews {
[super layoutSubviews];
if(_idEvent == 0) return;
_buttonFav = [[UIButton alloc]initWithFrame:CGRectMake(0, 0, 40, 40)];
[_buttonFav setImage:[UIImage imageNamed:@"fav.png"] forState:UIControlStateNormal];
[_buttonFav addTarget:self action:@selector(pressedFavButton:) forControlEvents:UIControlEventTouchDown];
_labelButton = [[UILabel alloc]initWithFrame:CGRectMake(0, 45, 0, 20)];
_labelButton.text = @"LABEL";
[self addSubview:_labelButton];
[self addSubview:_buttonFav];
}
这是第二次动画之前正确调用。我的刷新方法是:
- (void)refresh {
if(selected){
[_buttonFav setImage:[UIImage imageNamed:@"fav_sel.png"] forState:UIControlStateNormal];
}
else{
[_buttonFav setImage:[UIImage imageNamed:@"fav.png"] forState:UIControlStateNormal];
}
}
如果我只是设置取决于让我知道,如果按钮被窃听的属性按钮图像。
只需确认:此项目中不使用自动布局? –
我这样做,如何用自动布局制作动画呢?使用新的XCode,你没有一个选项来禁用它。 – subharb