2014-10-22 2 views
0

Здесь странно, Я перемещаю позицию UIView по следующему коду, он отлично работал в ios7, но в ios8 анимация сбрасывает анимацию, даже я редактирую текст любой метки в контроллере , Это действительно очень странно для меня[UIView animateWithDuration анимация переиздается после изменения текста ярлыка

if (!self.setTouch) { 
    [UIView animateWithDuration:kViewAnimateWithDuration 
    delay:kViewDelay 
    options:UIViewAnimationOptionCurveEaseInOut | 
    UIViewAnimationOptionAllowUserInteraction 
    animations:^{ 
     //Move frame or transform view 
     [self.sliderView setFrame:CGRectMake(self.sliderView.frame.origin.x,-205,self.sliderView.frame.size.width,249)]; 
     self.setTouch = YES; 
     // [self.containerView setFrame:CGRectMake(self.bottomView.frame.origin.x, self.bottomView.frame.origin.y +171, width_b, height_b -171)]; 
    } completion:^(BOOL finished) { 
     self.setTouch = YES; 
    }]; 
} else { 
    [UIView animateWithDuration:kViewAnimateWithDuration 
    delay:kViewDelay 
    options:UIViewAnimationOptionCurveEaseInOut | 
    UIViewAnimationOptionAllowUserInteraction 
    animations:^{ 
     [self.sliderView setFrame:CGRectMake(self.sliderView.frame.origin.x,0.0f,self.sliderView.frame.size.width,249.0)]; 
     self.setTouch = NO; 
    } completion:^(BOOL finished) { 
     self.setTouch = NO; 
    }]; 
} 

Вот код, который изменяет текст метки:

NSTimer *timer= [NSTimer scheduledTimerWithTimeInterval:5.0 target:self 
    selector:@selector(change_announcement:) userInfo:nil repeats:YES]; 

Вот фактический метод:

(IBAction)change_announcement:(id)sender { 
    if ([_announcements count] == 0) { 
     return; 
    } 

    AnnouncementDAO *ob = [_announcements objectAtIndex:_index]; 

    if(_isArabic){ 
     // [_label_announcementEn setHidden:YES]; 
     //[_label_announcementAr setHidden:NO]; 
     [_label_announcementAr setText:ob.announcementArabicTitle]; 
    } else{ 
     // [_label_announcementAr setHidden:YES]; 
     // [_label_announcementEn setHidden:NO]; 
     [_label_announcementEn setText:ob.announcementEngTitle]; 
    } 

    if (_index >= [_announcements count]-1) { 
     // NSLog(@"Make index 0"); 
     _index = -1; 
    } 
    _index ++; 
} 

Когда я NSLog sliderView ограничения я вижу следующий вывод:

"<NSIBPrototypingLayoutConstraint:0x7b048740 'IB auto generated at build time for view with fixed frame' H:|-(0)-[UIView:0x7b04b6a0](LTR) (Names: '|':UIView:0x7b04b710)>", 
"<NSIBPrototypingLayoutConstraint:0x7b048710 'IB auto generated at build time for view with fixed frame' V:|-(0)-[UIView:0x7b04b6a0] (Names: '|':UIView:0x7b04b710)>", 
"<NSIBPrototypingLayoutConstraint:0x7b0486e0 'IB auto generated at build time for view with fixed frame' H:[UIView:0x7b04b6a0(768)]>", 
"<NSIBPrototypingLayoutConstraint:0x7b0486b0 'IB auto generated at build time for view with fixed frame' V:[UIView:0x7b04b6a0(25)]>", 
"<NSIBPrototypingLayoutConstraint:0x7b048680 'IB auto generated at build time for view with fixed frame' H:|-(348)-[UIButton:0x7b0e72b0](LTR) (Names: '|':UIView:0x7b04b710)>", 
"<NSIBPrototypingLayoutConstraint:0x7b048650 'IB auto generated at build time for view with fixed frame' V:|-(206)-[UIButton:0x7b0e72b0] (Names: '|':UIView:0x7b04b710)>", 
"<NSIBPrototypingLayoutConstraint:0x7b048620 'IB auto generated at build time for view with fixed frame' H:[UIButton:0x7b0e72b0(73)]>", 
"<NSIBPrototypingLayoutConstraint:0x7b0485f0 'IB auto generated at build time for view with fixed frame' V:[UIButton:0x7b0e72b0(22)]>", 
"<NSIBPrototypingLayoutConstraint:0x7b0485c0 'IB auto generated at build time for view with fixed frame' H:|-(0)-[UIView:0x7b04d690](LTR) (Names: '|':UIView:0x7b04b710)>", 
"<NSIBPrototypingLayoutConstraint:0x7b048590 'IB auto generated at build time for view with fixed frame' V:|-(25)-[UIView:0x7b04d690] (Names: '|':UIView:0x7b04b710)>", 
"<NSIBPrototypingLayoutConstraint:0x7b048560 'IB auto generated at build time for view with fixed frame' H:[UIView:0x7b04d690(768)]>", 
"<NSIBPrototypingLayoutConstraint:0x7b048530 'IB auto generated at build time for view with fixed frame' V:[UIView:0x7b04d690(181)]>" 
+0

Как выглядит код, используемый для изменения текста? – Flexicoder

+0

Код для редактирования UILabel Text добавлен сейчас – Ali

ответ

1

Во-первых .. изменить свой код на это ...

[UIView animateWithDuration:kViewAnimateWithDuration 
         delay:kViewDelay 
        options:UIViewAnimationOptionCurveEaseInOut | UIViewAnimationOptionAllowUserInteraction 
       animations:^{ 
        CGRect sliderFrame = self.sliderView.frame; 

        if (!self.setTouch) { 
         //Move frame or transform view 
         self.sliderView.frame = CGRectMake(CGRectGetMinX(sliderFrame), -205, CGRectGetWidth(sliderFrame), 249); 
         self.setTouch = YES; 
         //[self.containerView setFrame:CGRectMake(self.bottomView.frame.origin.x, self.bottomView.frame.origin.y +171, width_b, height_b -171)]; 
        } else { 
         self.sliderView.frame = CGRectMake(CGRectGetMinX(sliderFrame), 0.0, CGRectGetWidth(sliderFrame), 249); 
         self.setTouch = NO; 
        } 
       } 
       completion:nil]; 

Нет необходимости, чтобы сделать его более сложным, чем это должно быть.

Второй ... вы используете AutoLayout?

EDIT

Вы используете AutoLayout. Вот почему он не работает. Вы не можете изменить рамку представления непосредственно при использовании AutoLayout.

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

Вам нужно получить ссылку на ограничение, которое вы хотите изменить, и использовать его для перемещения слайдера.

Я бы рекомендовал посмотреть на сайт Рэя Вендерлиха. Есть несколько удивительных учебников AutoLayout, которые охватывают анимацию с помощью AutoLayout.

+0

Нет, я использую автозапуск только на основном UIScrollView, устанавливая положение вручную в разных других видах. – Ali

+0

Хорошо, сделайте это для меня ... 'NSLog (@"% @ ", self.sliderView .constraints); 'где-то вроде' viewDidAppear' просто чтобы что-то проверить. И дайте мне знать, каковы результаты. – Fogmeister

+0

Пожалуйста, проверьте правильность вопроса для него – Ali

Смежные вопросы