Ios 重初始化会导致UIView动画在第一次尝试时不设置动画?

Ios 重初始化会导致UIView动画在第一次尝试时不设置动画?,ios,uiview,uiviewanimation,Ios,Uiview,Uiviewanimation,考虑到我的调色板的框架是这样的: _palette.frame = CGRectMake(0,480,320,200); 我这里有一段代码,可以在UIView上/下滑动: if(![_pallete superview]) { [self.view addSubview:_pallete]; [self.view insertSubview:_tempViewPaletteListener belowSubview:_pallete]; [UIView animateWithDuration

考虑到我的调色板的框架是这样的:

_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只是一个带有点击手势的视图,用于关闭调色板*

问题是,当我第一次尝试在这里运行代码时,_调色板视图将立即僵硬地显示出来。 我所期望的是,它应该在调色板视图中向上滑动

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

更新:

从UIView动画更改的问题标题第一次尝试时不设置动画?重初始化导致UIView动画在第一次尝试时不设置动画

我上面的代码运行良好,只是在调用动画之前,我布局了调色板视图和加载项

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


问题是颜色选择器的创建太重了,我想,这就是为什么它不能显示向上滑动的动画的原因,正如Borrden在评论中所说的,它看起来没有动画可显示,因为当您向视图添加托盘时,它已经处于完成动画的位置:尝试以下操作:

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

您确定添加托盘时top是正确的吗?您可能使用完成的矩形创建它,因此它不会设置任何动画,但是当您使用退出动画更改它时,它下次将具有正确的值。top属性是什么?设置它时发生了什么?它不是UIView.ohh的默认属性之一,我忘了它是从类别UIView+Additions快捷方式设置frame.origin.ydependent的,取决于您使用的RSColorPicker的哪个版本可能有一个禁用动画的错误,该错误已修复。另外,正如你所提到的,颜色选择器需要一些能力来生成,最近也得到了改进,你可以在显示它之前强制它在背景中生成。但最初我的调色板的框架位于视图的底部,我将更新我的问题我已更新我的问题。我的问题是,在第一个动画之前,我的调色板视图仍然为零,所以我为它创建了一个视图,我想,创建过程非常繁重
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];
                     }];
}