【发布时间】:2013-10-14 12:04:36
【问题描述】:
我正在尝试制作一个自定义视图,其中一个元素(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,您无法选择禁用它。
标签: ios objective-c animation uiview