2012-06-29 1 views
0

Учитывая, что рамки моего _palette является так:Тяжелая инициализация заставляет анимацию UIView не анимировать с первой попытки?

_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.

Хотя он работает отлично после первой попытки

Update: «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 
    } 
} 

, и я заметил, что когда я не добавить палитру цветов и просто обычный вид для анимации , анимация работает отлично (конечно же, как это должно быть).

Проблема заключается в создании набора цветов, который слишком велик, что я думаю, является причиной того, почему он не может показать анимацию скольжения вверх

+0

Вы уверены, что 'top' является правильно, когда вы добавляете _pallete? Вы, вероятно, создаете его с готовым прямоугольником, поэтому он просто ничего не оживляет, но когда вы измените его с анимацией выхода, он будет иметь правильное значение в следующий раз. – borrrden

+0

Что такое свойство 'top'? Что происходит, когда вы его устанавливаете? Это не одно из свойств по умолчанию для UIView. –

+0

ohh, я забыл, что это из категории (UIView + Additions). Ярлык для установки frame.origin.y – bluezald

ответ

0

As b orrrden сказал в комментариях, похоже, нет анимации для отображения, так как при добавлении _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]; 
        }]; 
} 
+0

, но изначально моя рамка _palette находится внизу представления, плохо обновляю мой вопрос – bluezald

+0

Я обновил свой вопрос. Моя проблема заключается в том, что перед первой анимацией мой палитры все еще ноль, поэтому я создал для нее представление, и создание, я думаю, очень тяжелое – bluezald