2012-08-17 12 views
6

için uygulanan rotasyon ayarlar. Her şey, CATiledLayer tarafından desteklenen UIScrollView ile çalışır. UIScrollView setZoomScale şimdi uzunca bir süre için bir harita yerine üzerinde çalışıyoruz geri Zero

i katmanının kendisini döndürmek, benim haritayı döndürmek için.) = Şimdiye kadar oldukça iyi çalışır

(CATransform3DMakeRotation Kullanılması) Ama şimdiye kadar setZoomScale yöntem Sorum şu 0.

için rotasyon sıfırlıyor benim katmanına sunulacak gidiyor CATransform3D ararsanız, orada Uyguladığınız rotasyonu kaybetmeden scrollView'ımın zoomscale'u ayarlamanın herhangi bir yolu var mı?

aynı sorunu tutam hareketleri için mevcuttur. Geçerli Pozisyon etrafında döndürmek için Bilgiler

Ek

// i çapa noktasını düzenlemek zorunda. Belki de bu, ölçekleme için bir sorundur.

- (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]; 
    } 
} 

cevap

7

Sen istenen etkiyi elde etmek için scrollViewDidZoom: temsilci yöntemini uygulamak ve iki dönüşümleri arada kullanabilirsiniz:

- (void) scrollViewDidZoom:(UIScrollView *) scrollView 
{ 
    CATransform3D scale = contentView.layer.transform; 
    CATransform3D rotation = CATransform3DMakeRotation(M_PI_4, 0, 0, 1); 

    contentView.layer.transform = CATransform3DConcat(rotation, scale); 
} 

DÜZENLEME

Ben daha basit bir fikrim var! Döndürme dönüşümü ile hiyerarşiye başka bir görünüm ekleme hakkında ne dersiniz? İşte önerilen hiyerarşisi şöyledir:

  • scrollview
    • contentView - viewForZoomingInScrollView:
      • RotationView tarafından döndürülen tek - rotasyonla bir
        • MapView dönüşümü - tüm çinileri ile bir

O performansı burada herhangi bir endişe olmalı sanmıyorum ve denemeye değer.

+0

Hey Bartosz, her şeyden önce, bu yazı için teşekkürler! Ama bu benim için işe yaramadı ... Mevcut konumun etrafında dönmek için çapa noktasını düzenledim. Belki de sorun bu mu? Gönderiyi düzenleyip o kodu ekleyeceğim. –

+0

Yani rotasyonu korudu, ancak dönüş ekseni yanlıştı, değil mi? –

+0

Gerçekten söyleyemem. Sadece gördüğüm kadarıyla, garip bir nokta etrafında çok döner. Fakat eksen doğru görünüyor. –

İlgili konular