簡體   English   中英

繁重的初始化會導致UIView動畫在第一次嘗試時沒有動畫?

[英]Heavy initialization causes UIView animation to not animate at first try?

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

並且我注意到,當我不添加顏色選擇器並且僅添加普通視圖進行動畫處理時,動畫效果很好(當然應該如此簡單)。

問題是我猜顏色選擇器的創建太重了,這就是為什么它無法顯示向上滑動的動畫的原因

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM