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 に答える