2009-05-08 9 views

Odpowiedz

18

Jednym ze sposobów jest zmiana anchorPoint warstwy bazowej UIImageView i obracanie wokół niej. Punkt obrotu można zmienić za pomocą następującego elementu:

imageView.layer.anchorPoint = CGPointMake(0.25, 0.25); 

anchorPoint definiuje się w kategoriach współrzędnych względnych w warstwie. Oznacza to, że (0,0) jest lewą górną warstwą (na iPhone'ie, gdzie warstwy UIView mają odwrócone współrzędne Y), a (1,1) to dolne prawe.

Przenoszenie elementu anchorPoint może spowodować przeniesienie obrazu, dlatego może zajść potrzeba późniejszej regulacji jego położenia.

Aby obrócić warstwę obrazka o tym nowym punktem kontrolnym, można zmienić struct CATransform3D dla warstwy używając coś jak następuje:

CATransform3D rotatedTransform = imageView.layer.transform; 
rotatedTransform = CATransform3DRotate(rotatedTransform, 60.0 * M_PI/180.0, 0.0f, 0.0f, 1.0f); 
imageView.layer.transform = rotatedTransform; 

Ten przykład robi przyrostową obrót 60 stopni wokół punktu zakotwiczenia .

Wszystkie zmiany w warstwie są domyślnie animowane. Można wyłączyć tę animację załączając swoje zmiany do tych właściwości w CATransaction jak następuje:

[CATransaction begin]; 
[CATransaction setValue:(id)kCFBooleanTrue forKey:kCATransactionDisableActions];  

// Code for changes here 

[CATransaction commit]; 
+2

Wystarczy dodać kilka uwag tutaj dla moich przyszłych jaźni: '#import #import 'i musisz również zaimportować framework' QuartzCore'. Dzięki. –

+0

, ale to przesuwa obraz, jak mówisz. Czy możliwe jest przesunięcie punktu kontrolnego? – hfossli

+0

@Fossli - Nie, położenie warstwy jest powiązane z jej punktem kontrolnym. Jednak stosunkowo łatwo jest ustalić, jaka powinna być nowa pozycja dla warstwy i zmienić zarówno punkt kontrolny, jak i położenie warstwy w jednej nieanimowanej transakcji. –

Powiązane problemy