2010-02-05 16 views
5

Yakınlaştırmak ve kaydırmak için bir UIScrollView var. Bir kullanıcı komutundan sonra görüntünün merkeze kaydırılmasını istiyorum. Sorunum, görüntünün merkezinde bulunan bir çerçevenin boyutunu ve konumunu hesaplamaktır.Bir görüntünün merkezine gitmek için scrollRectToVisible uygulamasını nasıl kullanabilirim?

Görüntünün merkezi için doğru çerçeveyi nasıl hesaplayacağımı bilen var mı? Sorun şu ki, zoomScale farklıysa, çerçeve değişir.

Teşekkürler!

+0

http://www.raywenderlich.com/10518/how-to-use-uiscrollview-to-scroll-and-zoom-content sihirli sayılarla gerçekten yararlı değil –

cevap

12

herkes ihtiyacı ;-) içinde olduğu durumda kod belki biraz daha iyi oluyor

UIScrollView + CenteredScroll.h:

@interface UIScrollView (CenteredScroll) 

-(void)scrollRectToVisibleCenteredOn:(CGRect)visibleRect 
          animated:(BOOL)animated; 

@end 

UIScrollView + CenteredScroll.m:

@implementation UIScrollView (CenteredScroll) 

-(void)scrollRectToVisibleCenteredOn:(CGRect)visibleRect 
          animated:(BOOL)animated 
{ 
    CGRect centeredRect = CGRectMake(visibleRect.origin.x + visibleRect.size.width/2.0 - self.frame.size.width/2.0, 
            visibleRect.origin.y + visibleRect.size.height/2.0 - self.frame.size.height/2.0, 
            self.frame.size.width, 
            self.frame.size.height); 
    [self scrollRectToVisible:centeredRect 
        animated:animated]; 
} 

@end 
+0

Harika, benim için çalış. –

-5

Tamam, işe koyuldum. Herkes ihtiyacı olduğunu örtmek İşte kod: Burada

CGFloat tempy = imageView.frame.size.height; 
CGFloat tempx = imageView.frame.size.width; 
CGRect zoomRect = CGRectMake((tempx/2)-160, (tempy/2)-240, myScrollView.frame.size.width, myScrollView.frame.size.height); 
[myScrollView scrollRectToVisible:zoomRect animated:YES]; 
+9

.. –

7

Daniel Bauke yanıtını temel alarak, kodunun yakınlaştırma s. cale:

@implementation UIScrollView (jsCenteredScroll) 

-(void)jsScrollRectToVisibleCenteredOn:(CGRect)visibleRect 
          animated:(BOOL)animated 
{ 

    CGPoint center = visibleRect.origin; 
    center.x += visibleRect.size.width/2; 
    center.y += visibleRect.size.height/2; 

    center.x *= self.zoomScale; 
    center.y *= self.zoomScale; 


    CGRect centeredRect = CGRectMake(center.x - self.frame.size.width/2.0, 
            center.y - self.frame.size.height/2.0, 
            self.frame.size.width, 
            self.frame.size.height); 
    [self scrollRectToVisible:centeredRect 
        animated:animated]; 
} 

@end 
1
private func centerScrollContent() { 
    let x = (imageView.image!.size.width * scrollView.zoomScale/2) - ((scrollView.bounds.width)/2) 
    let y = (imageView.image!.size.height * scrollView.zoomScale/2) - ((scrollView.bounds.height)/2) 
    scrollView.contentOffset = CGPointMake(x, y) 
} 
İlgili konular