2015-11-11 7 views
1

Это связанное с этим SO question действительно похоже на мою проблему, но предоставленный ответ не устраняет мои проблемы.UIBarButtonItem обновленная анимация смещена

У меня есть кнопка обновления, которую я анимация, когда она прослушивается. Это UIBarButtonItem, созданный в раскадровке и образ, который я использовал для создания является:

enter image description here

AFAIK - изображение квадрат и круг изображали центрируется и верно.

Когда я нажимаю изображение я называю эту анимацию код:

#define DEGREES_TO_RADIANS(angle) ((angle)/180.0 * M_PI) 
- (void)animateRefreshButton; 
{ 
    UIBarButtonItem *item = self.refreshButton; 
    UIView *view = [item valueForKey:@"view"]; 

    [UIView animateWithDuration:0.5 delay:0.3 options:UIViewAnimationOptionCurveEaseInOut animations:^
    { 
     view.transform = CGAffineTransformMakeRotation(DEGREES_TO_RADIANS(180)); 
    } completion: ^(BOOL finished) 
    { 
     view.transform = CGAffineTransformMakeRotation(DEGREES_TO_RADIANS(0)); 

    }]; 
} 

Однако анимация «скачки», и это также влияет на титул. Смотрите GIF:

enter image description here

Я попытался довольно много вещей, но выше видео о лучшей анимации я могу добраться. Вещи, которые я пробовал, включают в себя:

  • добавление изображения в пользовательский вид кнопки и оживление этого.
  • регулировки врезки изображения (но это по-другому на каждом устройстве и вращения)
  • регулировочного размер самого изображения, чтобы соответствовать размеру панель навигации «превращает его в», примерно 50х30
  • применения различных анимационных блоков для попытаться замаскировать «прыжок» (ужасный)

Если кто-то имел подобную проблему и решить ее, то любые указатели было бы здорово

Кроме того, если я СУИ наведением с техникой я нахожусь используя сообщите пожалуйста.

я проверить изображение и кажется штраф, но кто-то может знать лучше.

+0

На самом деле, я не вижу проблемы в вашем видео: Существует начальная задержка после щелчка 0,3 сек, изображение вращается на 180 градусов в 1/2 секунды, и заголовок не изменяется. Так в чем проблема? –

+0

Изображение перемещается вверх, постукивая по нему – Damo

ответ

0

Ok - секрет это было открытие, что по умолчанию изображение, которое используется в UIBarButtonItem повторно размером до 50x30

UIBarButtonItem *item = self.refreshButton; 
UIView *view = [item valueForKey:@"view"]; 

В этот момент я поставил точку останова в и проверил кадр из и это был размер 50 х 30!

Кроме того, я добавил пользовательский вид изображения вращения размером 50 х 30 на кнопку и повернул его.

#pragma mark - UIRefreshControl method(s) 

- (void)configureSpinningView; 
{ 
    // 50x30 is the size that the nav bar sets for the buttons image... 

    self.refreshControlSpinningImageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 50, 30)]; 
    self.refreshControlSpinningImageView.image = [UIImage imageNamed:@"btnSync"]; 
    self.refreshControlSpinningImageView.autoresizingMask = UIViewAutoresizingNone; 
    self.refreshControlSpinningImageView.contentMode = UIViewContentModeCenter; 

    UITapGestureRecognizer *tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(refreshTapped:)]; 

    [self.refreshControlSpinningImageView addGestureRecognizer:tapRecognizer]; 
} 

#pragma mark - aimation(s) 

#define DEGREES_TO_RADIANS(angle) ((angle)/180.0 * M_PI) 
- (void)animateRefreshButton; 
{ 
    [self.refreshButton setCustomView:self.refreshControlSpinningImageView]; 

    [UIView animateWithDuration:0.5 delay:0.3 
options:UIViewAnimationOptionCurveEaseInOut animations:^
    { 
     self.refreshControlSpinningImageView.transform = CGAffineTransformMakeRotation(DEGREES_TO_RADIANS(180)); 
    } completion: ^(BOOL finished) 
    { 
     self.refreshControlSpinningImageView.transform = CGAffineTransformMakeRotation(DEGREES_TO_RADIANS(0)); 

     [self.refreshButton setCustomView:nil]; 
     }]; 
} 

#pragma mark - IBAction(s) 

- (IBAction)refreshTapped:(UIBarButtonItem *)sender; 
{ 
    //deletia 

    [self animateRefreshButton]; 
} 

Вот видео из затруднительного:

enter image description here