2014-04-24 3 views
5

पर ज़ूम करें जब मेरे पास .svg में विश्व मानचित्र की छवि है जो मैं UIWebView में लोड करता हूं। (मैंने svg प्रारूप और UIWebView का उपयोग किया क्योंकि छवि UIImageView में लोड करने के लिए बहुत बड़ी है)UIWebView के सबव्यूव के रूप में UIButton जोड़ें और ज़ूम

मैं इस स्थिति पर निश्चित स्थिति के साथ पिन का एक गुच्छा रखना चाहता हूं।

उदाहरण के लिए अगर मैं ब्राजील में एक पिन डाल दिया, इस पिन हमेशा कोई फर्क नहीं पड़ता ब्राजील में ही रहना चाहिए, अगर मैं स्क्रॉल या ज़ूम UIWebView

तुम ऐसा कैसे कर सकता है? अब के लिए स्क्रॉल एक समस्या है, लेकिन केवल ज़ूम नहीं है

NSString *path = [[NSBundle mainBundle] pathForResource:@"map" ofType:@"svg"]; 

NSURL *url=[[NSURL alloc] initFileURLWithPath:path]; 
NSURLRequest *request=[[NSURLRequest alloc]initWithURL:url]; 
[_webView loadRequest:request]; 
_webView.scalesPageToFit = YES; 
_webView.delegate = self; 

UIButton *but = [[UIButton alloc] initWithFrame:CGRectMake(100, 400, 30, 30)]; 
[but setBackgroundColor:[UIColor blackColor]]; 
[_webView.scrollView addSubview:but]; 

संपादित के रूप में scrollview के प्रतिनिधि तरीकों का उपयोग कर @dymv ने सुझाव दिया है, हम बटन के आकार को बदल सकते हैं लेकिन वहाँ समस्याएं हैं:

कई कोड के साथ इस कोड का पुन: उपयोग कैसे करें?

EDIT2:

मैं कई बटन समस्या रिश्तेदार हल, लेकिन अब ऐसा लगता है कि मैं पिन एक ही बिंदु पर तय नहीं डाल सकते हैं।

जाहिर है कि ज़ूम के आधार पर पिन परिवर्तन के निर्देशांक बदलते हैं, लेकिन समस्या यह है कि दृश्यमान पिन जहां कहीं होना चाहिए, उतना अधिक चलता है।

के रूप में ऊपर अगर मैं ब्राजील के तट पर एक पिन डाल उदाहरण के लिए, जब मैं बाहर ज़ूम, पिन समुद्र के ऊपर चला जाता है, और तट पर नहीं रहता।

स्थिति की समस्या काफी था हल करने के लिए इस विधि को बदलने के लिए: यह वास्तव में इतने सारे पिन के साथ के रूप में एक समस्या है, अंतिम परिणाम बहुत बुरी

-(void)webViewDidFinishLoad:(UIWebView *)webView { 

    CGPoint primo = CGPointMake(100, 100);  

    for (int i = 0; i<36; i++) { 

     UIButton *bu = [[UIButton alloc] initWithFrame:CGRectMake(primo.x, primo.y, 10, 18)]; 
     [bu setBackgroundImage:[UIImage imageNamed:@"pin"] forState:UIControlStateNormal]; 
     [bu addTarget:self action:@selector(buttonTouch:) forControlEvents:UIControlEventTouchUpInside]; 
     [_webView.scrollView addSubview:bu]; 
     bu.tag = i; 

     [arrayOfPoint addObject:[NSValue valueWithCGPoint:bu.center]]; 
     [arrayOfRect addObject:[NSValue valueWithCGRect:bu.frame]]; 

     primo.x = primo.x + 20; 
     primo.y = primo.y + 10; 
    } 
} 


-(void)scrollViewDidZoom:(UIScrollView *)scrollView { 

    CGFloat scale = scrollView.zoomScale; 

    for (UIView *button in scrollView.subviews) { 

     if ([button isMemberOfClass:[UIButton class]]) { 

     int i = button.tag; 

     NSValue *newValue = [arrayOfRect objectAtIndex:i]; 
     CGRect newFrame = [newValue CGRectValue]; 

     button.frame = CGRectMake(CGRectGetMinX(newFrame) * scale, 
            CGRectGetMinY(newFrame) * scale, 
            CGRectGetWidth(newFrame), 
            CGRectGetHeight(newFrame)); 

     } 
    } 
} 

-(void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(CGFloat)scale { 

    for (UIView *button in scrollView.subviews) { 

    if ([button isKindOfClass:[UIButton class]]) { 

     int tag = button.tag; 
     CGRect rectPre = button.frame; 
     [arrayOfRect replaceObjectAtIndex:tag withObject:[NSValue valueWithCGRect:rectPre]]; 

    } 
    } 
} 

हल हो जाएगा

-(void)scrollViewDidZoom:(UIScrollView *)scrollView { 

    CGFloat scale = scrollView.zoomScale; 

    for (UIView *button in scrollView.subviews) { 

     if ([button isMemberOfClass:[UIButton class]]) { 

     int i = button.tag; 

     NSValue *newValue = [arrayOfRect objectAtIndex:i]; 
     CGRect newFrame = [newValue CGRectValue]; 

     button.frame = CGRectMake(CGRectGetMinX(newFrame) * scale, 
            CGRectGetMinY(newFrame) * scale, 
            CGRectGetWidth(newFrame) * scale, //add *scale 
            CGRectGetHeight(newFrame) * scale); // add *scale 

     } 
    } 
} 
+0

आप छवि का आकार मुद्दों कर रहे हैं, तो आप 'की जाँच CATiledLayer' कर सकते हैं। –

उत्तर

6

आप आईओएस 5 को लक्षित कर रहे हैं और अधिक आप UIWebView उदाहरण और ख से scrollView संपत्ति का उपयोग कर सकते हैं अपने प्रतिनिधि बनें।

हम scrollView:zoom* विधियों में रुचि रखते हैं। मूल विचार है:

1) पर -scrollViewDidZoom: आप बटन स्थिति रहे खाते currentButtonFrame में लेने के साथ scrollView.zoomScale के अनुसार;

2) -scrollViewDidEndZooming:withView:atScale: पर आप currentButtonFrame अपडेट कर रहे हैं।

नमूना प्रोजेक्ट here जांचें।

enter image description here

+0

महान उत्तर !!! मैं फाइल देख रहा हूं, और आपको बताता हूं! – Ilario

+0

यह सही काम करता है ..लेकिन केवल सवाल: आपके पास कई और बटन हैं ?? 100 बटन की तरह .. मैं स्क्रॉलव्यू में 100 बार कोड नहीं लिख सकता हूंडिडज़ूम – Ilario

+0

मैंने अपना प्रश्न फिर से संपादित किया है;) – Ilario

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