我试图制作一个自定义视图,其中一个元素(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:这是关于同一问题但角度不同的第二个问题。我之前的问题
[更新]
这是我的 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];
}
}
我只是根据让我知道按钮是否被点击的属性来设置按钮的图像。