2012-12-27 20 views
7

W gruncie rzeczy dzieje się tak, że dodaję niestandardowy widok do UIBarButtonItem, i muszę go obrócić o 45 stopni, rotacja działa idealnie, jeśli jest obrócona o 90 stopni lub 180, ale kiedy jest mniej niż 90 obiekt ulega deformacji, a na 45 stopni obiekt znika. Oto fragmenty przycisku i animacji.Funkcja iOS UIImageView znika po obrocie M_PI_4

UIImageView * menuImage = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"plus.png"]]; 
menuButton = [[UIBarButtonItem alloc] initWithCustomView:menuImage]; 
UITapGestureRecognizer * tap1 = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(toggleMenuView:)]; 
[menuImage addGestureRecognizer:tap1]; 
[menuImage setUserInteractionEnabled:YES]; 
[menuImage.layer setShadowColor:[UIColor blackColor].CGColor]; 
[menuImage.layer setShadowOffset:CGSizeMake(ShadowSizeWidth, ShadowSizeHeight)]; 
[menuImage.layer setShadowOpacity:ShadowOpacity]; 
[menuImage.layer setShadowRadius:ShadowRadius]; 

[self.navigationItem setRightBarButtonItem:menuButton]; 

Obrót:

[UIView animateWithDuration:animationRotateButtonDuration delay:0.0f options:UIViewAnimationCurveLinear animations:^{ 
    CGAffineTransform myTransform = CGAffineTransformMakeRotation(-M_PI_4); 

    UIBarButtonItem * currentItem = menuButton; 

    currentItem.customView.transform = myTransform; 

}completion:^(BOOL finished){ 
}]; 
+0

Próbuję również obrócić niestandardowy widok elementu przycisku paska i uruchomić go w tę samą funkcję. Inne widoki obracają się o M_PI_4, więc zastanawiam się, czy ma to coś wspólnego z UIBarButtonItem (?). –

+0

UIBarButtonItem ma niestandardowy widok jako tło, teraz sztuczka, która sprawiła, że ​​to działa, jest to, że niestandardowy widok wybrałem był UIImageView, który miał inny UIImageView jako dziecko, musiałem obrócić ten drugi UIImageView, aby to działało. Myślę, że jest to związane z UIBarButtonItem tak. – Noob

Odpowiedz

1

Zastosowanie Anchorpoint i importować "QuartzCore/QuartzCore.h"

currentItem.customView.layer.anchorPoint = CGPointMake(1.0, 0.0);//it is not fixed point you have to change. 

myślę to będzie pomocne dla Ciebie.

+0

Dziękuję za odpowiedź, ale to nie działa, będzie działać dla M_PI_2 z punktem (1.0.0.0), (0.5,0.5), (0.0.0.0) .. ale nie dla M_PI_4 obraz będzie znikać. – Noob

+0

Wypróbuj te punkty (0,4, 0,1), (0,8, 0,3) i musisz je zmienić, aż do uzyskania. Ten problem występuje tylko z powodu anchorPoint i dodaj tę linię przed rotacją. –

+0

Nadal nie działa ... – Noob

1

Miałem dokładnie taki sam problem jak ty. Mój problem polegał na tym, że robiłem rotację w widoku viewDidLoad.

Spróbuj zrobić to w widoku viewDidAppear, to zadziałało dla mnie.

0

Tak, miałem ten sam problem. Zrobiłem wszystko w ekspedycji raz w viewDidLayoutSubViews ..... To dziwne, że CGAffineTransformMakeRotation (M_PI_2); i CGAffineTransformMakeRotation (M_PI); działa, ale nie to. Jeśli ktokolwiek wie, czy jest to zgłaszany problem, bardzo bym podoba mi się ten link.

1

Jeśli tryb zawartości UIImageView jest ustawiony na UIViewContentModeScaleAspectFit lub inny skalowany aspekt, obrót spowoduje zniknięcie obrazu.

Zmiana właściwości contentMode na UIViewContentModeCenter powinna rozwiązać problem.

Powiązane problemy