Od jakiegoś czasu pracuję nad wymianą map. Całość działa z UIScrollView
wspieranym przez CATiledLayer
.UIScrollView setZoomScale ustawia zastosowaną rotację na Zero
Aby obrócić mapę, obracam samą warstwę. (Korzystanie CATransform3DMakeRotation
) działa całkiem dobrze do tej pory =)
Ale jeśli kiedykolwiek zadzwonić setZoomScale
metoda CATransform3D
, który ma zostać złożony do mojego warstwy resetuje obroty na 0.
Moje pytanie brzmi, czy istnieje w jaki sposób ustawić zoomscale
mojego scrollView bez utraty zastosowanego obrotu?
Ten sam problem występuje w przypadku gestów szczypania.
// Dodatkowe Informacje
obracać się wokół aktualnej pozycji, muszę edytować punkt zaczepienia. Może to też jest problem z skalowaniem.
- (void)correctLayerPosition {
CGPoint position = rootView.layer.position;
CGPoint anchorPoint = rootView.layer.anchorPoint;
CGRect bounds = rootView.bounds;
// 0.5, 0.5 is the default anchorPoint; calculate the difference
// and multiply by the bounds of the view
position.x = (0.5 * bounds.size.width) + (anchorPoint.x - 0.5) * bounds.size.width;
position.y = (0.5 * bounds.size.height) + (anchorPoint.y - 0.5) * bounds.size.height;
rootView.layer.position = position;
}
- (void)onFinishedUpdateLocation:(CLLocation *)newLocation {
if (stayOnCurrentLocation) {
[self scrollToCurrentPosition];
}
if (rotationEnabled) {
CGPoint anchorPoint = [currentConfig layerPointForLocation:newLocation];
anchorPoint.x = anchorPoint.x/rootView.bounds.size.width;
anchorPoint.y = anchorPoint.y/rootView.bounds.size.height;
rootView.layer.anchorPoint = anchorPoint;
[self correctLayerPosition];
}
}
Hej Bartosz, przede wszystkim, dziękuję za ten post! Ale to nie zadziałało ... Zmieniłem punkt zakotwiczenia, aby obrócić się wokół aktualnej pozycji. Może to problem? Będę edytować mój post i dodać ten kod. –
Więc zachował rotację, ale oś obrotu była nieprawidłowa, prawda? –
Nie mogę powiedzieć. Właśnie z tego, co widzę, obraca się dookoła dziwnego punktu. Ale oś wydaje się mieć rację. –