2011-11-07 16 views
5

मैं थोड़ी देर के लिए इस कोड को देख रहा हूं और अभी भी परेशान हूं कि यह क्यों काम नहीं कर रहा है। असल में: 1. उपयोगकर्ता तालिका दृश्य कक्ष का चयन करता है 2. UIScrollView का आह्वान किया गया है जिसमें उच्च रेज छवि या UIImage शामिल है। 3. निम्नलिखित Map.mइशारा पहचानकर्ता सक्रिय नहीं है - UISmrollView के अंदर UISmrollView

#import "Map.h" 

#define ZOOM_VIEW_TAG 100 
#define ZOOM_STEP 1.5 


@interface Map (UtilityMethods) 
- (CGRect)zoomRectForScale:(float)scale withCenter:(CGPoint)center; 
@end 


@implementation Map 

@synthesize imageScrollView, imageView; 

- (void)loadView { 
    NSLog(@"beginning of loadView in map.m"); 
    [super loadView]; 

    // set the tag for the image view 
    [imageView setTag:ZOOM_VIEW_TAG]; 
    imageScrollView.scrollEnabled = NO; 

    // add gesture recognizers to the image view 
    UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleSingleTap:)]; 
    UITapGestureRecognizer *doubleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleDoubleTap:)]; 
    UITapGestureRecognizer *twoFingerTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTwoFingerTap:)]; 

    [doubleTap setNumberOfTapsRequired:2]; 
    [twoFingerTap setNumberOfTouchesRequired:2]; 

    [imageView addGestureRecognizer:singleTap]; 
    [imageView addGestureRecognizer:doubleTap]; 
    [imageView addGestureRecognizer:twoFingerTap]; 

    [singleTap release]; 
    [doubleTap release]; 
    [twoFingerTap release]; 

    // calculate minimum scale to perfectly fit image width, and begin at that scale 
    float minimumScale = [imageScrollView frame].size.width/[imageView frame].size.width; 
    [imageScrollView setMinimumZoomScale:minimumScale]; 
    [imageScrollView setZoomScale:minimumScale]; 
} 


- (void)viewDidUnload { 
    self.imageScrollView = nil; 
    self.imageView = nil; 
} 


- (void)dealloc { 
    [imageScrollView release]; 
    [imageView release]; 
    [super dealloc]; 
} 

#pragma mark UIScrollViewDelegate methods 

- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView { 
    return [imageScrollView viewWithTag:ZOOM_VIEW_TAG]; 
} 

/************************************** NOTE **************************************/ 
/* The following delegate method works around a known bug in zoomToRect:animated: */ 
/* In the next release after 3.0 this workaround will no longer be necessary  */ 
/**********************************************************************************/ 
- (void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(float)scale { 
    [scrollView setZoomScale:scale+0.01 animated:NO]; 
    [scrollView setZoomScale:scale animated:NO]; 
} 

#pragma mark TapDetectingImageViewDelegate methods 

- (void)handleSingleTap:(UIGestureRecognizer *)gestureRecognizer { 
    // single tap does nothing for now 
} 

- (void)handleDoubleTap:(UIGestureRecognizer *)gestureRecognizer { 
    // double tap zooms in 
    NSLog(@"beginning handleDoubleTap to zoom"); 
    float newScale = [imageScrollView zoomScale] * ZOOM_STEP; 
    CGRect zoomRect = [self zoomRectForScale:newScale withCenter:[gestureRecognizer locationInView:gestureRecognizer.view]]; 
    [imageScrollView zoomToRect:zoomRect animated:YES]; 
} 

- (void)handleTwoFingerTap:(UIGestureRecognizer *)gestureRecognizer { 
    // two-finger tap zooms out 
    float newScale = [imageScrollView zoomScale]/ZOOM_STEP; 
    CGRect zoomRect = [self zoomRectForScale:newScale withCenter:[gestureRecognizer locationInView:gestureRecognizer.view]]; 
    [imageScrollView zoomToRect:zoomRect animated:YES]; 
} 

#pragma mark Utility methods 

- (CGRect)zoomRectForScale:(float)scale withCenter:(CGPoint)center { 

    CGRect zoomRect; 

    // the zoom rect is in the content view's coordinates. 
    // At a zoom scale of 1.0, it would be the size of the imageScrollView's bounds. 
    // As the zoom scale decreases, so more content is visible, the size of the rect grows. 
    zoomRect.size.height = [imageScrollView frame].size.height/scale; 
    zoomRect.size.width = [imageScrollView frame].size.width/scale; 

    // choose an origin so as to get the right center. 
    zoomRect.origin.x = center.x - (zoomRect.size.width/2.0); 
    zoomRect.origin.y = center.y - (zoomRect.size.height/2.0); 

    return zoomRect; 
} 

@end 

इशारों छवि से नहीं उठाया जा रहा है कहा जाता है? कृपया

उत्तर

18

UIImageView डिफ़ॉल्ट रूप से & मल्टी-टच इंटरैक्शन अक्षम करने में सहायता करें। उस पर छूने का पता लगाने के लिए आपको इसे स्वयं सक्षम करने की आवश्यकता है। तो आपके इशारा पहचानकर्ताओं को काम करने के लिए आपको loadView में इसे जोड़ने की आवश्यकता है।

कोड में यह प्रयास करें -

[imageView setUserInteractionEnabled:YES]; 
[imageView setMultipleTouchEnabled:YES]; 

यह विशेष रूप से कार्रवाई XCode में सक्रिय किया जा सकता। xib फ़ाइल। इस गोटो के लिए xib जहां imageView मौजूद है और user interaction/multi touch का उल्लेख करने वाले बॉक्स को चेक करें।

enter image description here

+0

आपकी प्रतिक्रिया के लिए धन्यवाद !!!!! मैंने कोड डाला है हालांकि डीबगर अब कहता है: –

+0

तो यह घटना को ज़ूम करके बस जवाब नहीं दे रहा है। यह भी कहता है: –

+0

यह क्या कहता है? –