重新初始化导致UIView动画在第一次尝试时没有动画?

时间:2012-06-29 06:29:09

标签: ios uiview uiviewanimation

考虑到我的_palette的框架是这样的:

_palette.frame = CGRectMake(0,480,320,200);

我在这里使用此代码向上/向下滑动UIView:

if(![_pallete superview]) {
[self.view addSubview:_pallete];
[self.view insertSubview:_tempViewPaletteListener belowSubview:_pallete];

[UIView animateWithDuration:0.3 
                 animations:^{
                   _pallete.top -= kPaletteHeight;
                 } 
                 completion:^(BOOL isFinished) {

                 }];

 } else {

[UIView animateWithDuration:0.3 
                 animations:^{
                   _pallete.top += kPaletteHeight;
                 } 
                 completion:^(BOOL isFinished) {
                   [_tempViewPaletteListener removeFromSuperview];
                   [_pallete removeFromSuperview];
                 }];
 }

* _tempViewPaletteListener只是一个用于关闭调色板的点击手势的视图*

问题是当我第一次尝试在这里运行代码时,_palette视图会立即僵硬地显示出来。 我的预期是,它应该向上滑动_palette视图。

虽然第一次尝试后效果很好

更新

更改了问题标题“UIView动画首次尝试不动画?”进入“重度初始化导致UIView动画在第一次尝试时没有动画?”

上面的我的代码工作得很好只是在调用动画之前我布局调色板视图并添加RSColorPicker

- (void)layoutPaletteView {

  if(!_colorPicker && !_brightnessSlider) {

    // Create Color Picker and Brightness Slider
  }

  if(!_pallete) {
    // Style the Palette View and add color picker and brightness slider as subview
  }
}

我注意到当我不添加颜色选择器而只是简单的动画视图时,动画效果很好(当然这很简单,它应该)..

问题是颜色选择器的创建太重了我猜,是不能显示滑动动画的原因

1 个答案:

答案 0 :(得分:0)

正如borrrden在评论中所说,看起来没有动画要显示,因为当你将_pallete添加到视图时它已经处于完成的动画位置:试试这个:

if(![_pallete superview]) {
    _pallete.top += kPaletteHeight;

    [self.view addSubview:_pallete];
    [self.view insertSubview:_tempViewPaletteListener belowSubview:_pallete];

    [UIView animateWithDuration:0.3 
                     animations:^{
                         _pallete.top -= kPaletteHeight;
                     } 
                     completion:^(BOOL isFinished) {

                     }];

} else {

    [UIView animateWithDuration:0.3 
                     animations:^{
                         _pallete.top += kPaletteHeight;
                     } 
                     completion:^(BOOL isFinished) {
                         [_tempViewPaletteListener removeFromSuperview];
                         [_pallete removeFromSuperview];
                     }];
}