Czytałem następujące, z One step affine transform for rotation around a point?:Jak mogę niezawodnie obracać obraz wokół punktu?
CGAffineTransform transform = CGAffineTransformMakeTranslation(x, y);
transform = CGAffineTransformRotate(transform, a);
transform = CGAffineTransformTranslate(transform,-x,-y);
Jednak, gdy robię to obrazy przekształcane są na całej mapie, a rzadko na ekranie.
Próbowałem trochę zrobić system, w którym będzie umieszczać obrazy; jeśli uruchomisz pętlę i wstawisz kilka wartości, pojawi się spirala. Jednakże, chociaż może uda mi się ostatecznie rozplątać związek między rotacją obrazów a punktami, które chciałem, aby się obracały, chciałem poprosić o najlepsze rozwiązanie: "Mam tu obraz, uważam, że ten punkt jest jego centrum, chcę, żeby była obrócona o tę kwotę wokół jej centrum, ale w żaden inny sposób nie mogłaby zostać przesunięta. "
Próbuję zmodyfikować port http://JonathansCorner.com/ancient-clock/, a teraz próbuję umieścić wskazówkę godzinową. Wszystkie próby wykonania piosenki i tańca powyżej i przetłumaczenia jej tak, aby jej centrum znajdowało się w pożądanym centrum, zawiodły.
W jaki sposób, dla rąk tego zegara, mogę powiedzieć "Chcę rąk w następujących obrotach" i czy są one odpowiednio umieszczone wokół środka?
--EDIT--
Zasadniczą część tego kodu, pod redakcją próbując wykorzystać warstwy w odpowiedzi na komentarz, to:
UIImage *hourHandImage = [UIImage imageNamed:@"hour-hand.png"];
UIImageView *hourHandView = [[UIImageView alloc] initWithImage:hourHandImage];
float hourRotation = .5;
hourHandImage = [UIImage imageNamed:@"hour-hand.png"];
hourHandView = [[UIImageView alloc] initWithImage:hourHandImage];
CGAffineTransform transform = CGAffineTransformMakeTranslation(centerX - 21, -centerY - 121);
// transform = CGAffineTransformRotate(transform, hourRotation);
// transform = CGAffineTransformTranslate(transform, 2 * centerX, 2 * centerY);
hourHandView.transform = transform;
hourHandView.layer.anchorPoint = CGPointMake(centerX, centerY);
hourHandView.layer.affineTransform = CGAffineTransformRotate(transform, hourRotation);
[self.view addSubview:hourHandView];
Dzięki,
- EDYTUJ:
Mam teraz coś zredukowanego; jeśli śledzę niektóre z instrukcją, mam:
CGAffineTransform transform = CGAffineTransformMakeTranslation(100 -21, 100 -121);
transform = CGAffineTransformRotate(transform, hour/12.0 * M_PI * 2.0);
transform = CGAffineTransformTranslate(transform, -330, 330);
hourHandView.transform = transform;
Chciałbym pracować na uzyskanie tych numerów na zewnątrz, ale nie ma to godzina 9:00 poprawnie wyświetlany.
Dzięki za pomoc!
Czy masz kilka przykładowych zdjęć można zamieścić? Co używasz tutaj jako "x" i "y"? Powinny być równe połowie szerokości i wysokości prostokąta obwiedni przedmiotu, który próbujesz obrócić. –
Co to jest "a"? Zauważ, że musi być wyrażony w radianach, a nie w stopniach. –
Wszystkie geometryczne manipulacje do widoku występują wokół punktu kontrolnego. Przykład, jeśli anchorPoint = {0.5,0.5} (w środku), widok obraca się tak, jakby znajdowała się oś Z prosto przez środek. Ręce zegara obracają się prawie wokół końcówki, więc potrzebujesz czegoś takiego jak hourHand.layer.anchorPoint = CGPointMake (0.5f, 0.9f); – Jano