0

考虑到我的 _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
  }
}

我注意到当我不添加颜色选择器而只添加一个普通视图来制作动画时,动画效果很好(当然就这么简单,它应该)..

问题是我猜颜色选择器的创建太重了,这就是它无法显示向上滑动动画的原因

4

1 回答 1

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];
                     }];
}
于 2012-06-29T10:01:27.910 回答