2013-07-28 3 views
-5

제발 제안하십시오, 내 코드는 아래에 주어집니다.슬라이드별로 이미지를 확대하는 방법은 무엇입니까?

#import "RootViewController.h" 

#define ZOOM_VIEW_TAG 100 
#define ZOOM_STEP 1.5 


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


@implementation RootViewController 

@synthesize imageScrollView, imageView, mySlider; 

- (IBAction) sliderValueChanged:(UISlider *)sender { 
    mySlider.value = [NSString stringWithFormat:imageScrollView.[sender value]]; 

    //mySlider.value = [NSString stringWithFormat:@" %.1f", [sender value]]; 


    //myTextField.text = [NSString stringWithFormat:@" %.1f", [sender value]]; 
} 


- (void)loadView { 
    [super loadView]; 

    // set the tag for the image view 
    [imageView setTag:ZOOM_VIEW_TAG]; 

    // 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 
    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 
+4

코드를 포맷하고 코드가 수행하는 작업과 수행해야 할 작업을 알려주십시오. – Wain

+0

sir 슬라이더를 슬라이드 할 때 이미지를 확대하고 싶습니다. 이 방법을 구현했지만 작동하지 않는 plz는 나를 제안합니다. - (IBAction) sliderValueChanged : (UISlider *) 발신자 방법은 ca –

+0

입니다. [imageScrollView setZoomScale : sender.value]; – Wain

답변

0

이해야할 일 :

  1. 구성 슬라이더의 최소 및 최대 값은 줌을 업데이트하여 스크롤 뷰
  2. 사용 [imageScrollView setZoomScale:sender.value];의 최소 및 최대 줌 배율을 동일 있도록 슬라이더가 변경된 경우

또한 슬라이더가 추가 된 수퍼 뷰를 확인하십시오. 스크롤 뷰에 추가해서는 안되며 다른 뷰에 추가해야합니다 (스크롤 뷰 슈퍼 뷰, 가능하면 앞쪽으로 가져 오기 가능).

관련 문제