2010-02-05 9 views
5

확대/축소 및 패닝을 사용하는 UIScrollView가 있습니다. 사용자 명령 후 이미지가 가운데로 스크롤되기를 원합니다. 내 문제는 이미지의 중심에있는 프레임의 크기와 위치를 계산하는 것입니다.scrollRectToVisible을 사용하여 이미지의 가운데로 스크롤하는 방법은 무엇입니까?

누구든지 내 이미지의 중심에 맞는 프레임을 계산하는 방법을 알고 있습니까? 문제는 zoomScale이 다른 경우 프레임이 변경된다는 것입니다.

감사합니다.

+0

http://www.raywenderlich.com/10518/how-to-use-uiscrollview-to-scroll-and-zoom-content 매직 넘버 정말 도움이되지 –

답변

12

사람이 필요 ;-) 인 경우 코드는 아마도 조금 더 나은

있는 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

좋아, 나를 위해 일해라. –

-5

좋습니다. 사람이 필요로 넣다 여기에 코드입니다 : 여기

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

다니엘 Bauke의 답변에 따라, 나는 줌의 포함하는 자신의 코드를 업데이트 케일 :

@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) 
}