0

我想以动画方式增加 UISlider 的宽度,但是在尝试使用滑块时动画完成后......它会回到它的起始宽度,即 0。

在.h

UISlider *slider;

视图加载:

 slider=[[UISlider alloc]initWithFrame:CGRectMake(65, 65, 0, 23)];
 [self.view addSubview:slider];

在 IBAction

[UIView beginAnimations:nil context:NULL];
[UIView setAnimationBeginsFromCurrentState:1];
[UIView setAnimationDuration:0.5];
slider.frame=CGRectMake(65, 65, 183, 23);
[UIView commitAnimations];
4

1 回答 1

0

检查您的 ViewController 上是否启用了自动布局。您可能必须将其关闭才能获得您期望的行为。

  1. 在 Storyboard 或 NIB 中选择 ViewController
  2. 单击 Xcode 窗口右侧的“文件检查器”选项卡
  3. 在“界面生成器文档”部分下,取消选中“使用自动布局”

希望这行得通。

编辑

好的,我想我发现了你的问题。除非 UISlider 的宽度大于 3,否则 UISlider 在视图上不可见。我假设您正在初始化宽度为 0 的 UISlider,因为您希望它通过动画“从无处出现”。您必须使用大于 3 的宽度初始化 UISlider 以使其具有动画效果。如果您仍然想要“无处出现”效果,我会在初始化时将 UISlider 的 alpha 属性设置为 0,然后在动画块中将 alpha 设置为 1。

像这样:

viewDidLoad:

slider=[[UISlider alloc]initWithFrame:CGRectMake(65, 65, 4, 23)];
slider.alpha=0;
[self.view addSubview:slider];

IBA动作:

[UIView animateWithDuration:5.0 animations:^{
    slider.frame=CGRectMake(65, 65, 183, 23);
    slider.alpha = 1;
} completion:^(BOOL finished) {
    //write code to be executed when animation is done
}];
于 2013-07-30T17:57:45.047 回答