UIView animateWithDuration不适用于UISlider

时间:2013-07-30 17:36:02

标签: ios objective-c cocoa-touch

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

in .h

UISlider *slider;

in .m

viewDidLoad:

 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];

1 个答案:

答案 0 :(得分:0)

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

  1. 在Storyboard或NIB中选择ViewController
  2. 单击Xco​​de窗口右侧的“文件检查器”选项卡
  3. 在“界面生成器文档”部分下,取消选中“使用Autolayout”
  4. 希望这有效。

    修改

    好的,我想我找出了你的问题。 UISlider在视图上不可见,除非它的宽度大于3.我假设您正在初始化宽度为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];
    

    IBAction为:

    [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
    }];