Domyślnie UIImageView obraca się tylko wokół jego środka. Jak mogę go obrócić wokół dowolnego innego punktu na obrazie?Jak mogę obrócić widok UIImageView względem dowolnego punktu (innego niż jego środek)?
Odpowiedz
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];
Wystarczy dodać kilka uwag tutaj dla moich przyszłych jaźni: '#import #import 'i musisz również zaimportować framework' QuartzCore'. Dzięki. –
, ale to przesuwa obraz, jak mówisz. Czy możliwe jest przesunięcie punktu kontrolnego? – hfossli
@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. –