2010-02-05 21 views
5

मेरे पास ज़ूमिंग और पैनिंग के साथ एक UIScrollView है। मैं चाहता हूं कि छवि उपयोगकर्ता के आदेश के बाद केंद्र पर स्क्रॉल करे। मेरी समस्या छवि के केंद्र में मौजूद फ्रेम के आकार और स्थान की गणना करने में है।मैं छवि के केंद्र में स्क्रॉल करने के लिए scrollRectToVisible का उपयोग कैसे कर सकता हूं?

क्या कोई जानता है कि मेरी छवि के केंद्र के लिए सही फ्रेम की गणना कैसे करें? समस्या यह है कि यदि ज़ूमस्केल अलग-अलग फ्रेम बदलता है।

धन्यवाद!

+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

डैनियल बाउके के उत्तर के आधार पर, मैंने ज़ूम एस को शामिल करने के लिए अपना कोड अपडेट किया केल:

@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) 
} 
संबंधित मुद्दे

 संबंधित मुद्दे