2012-02-21 12 views
5

Mam widok niewykrywalny i znajduje się w nim widok uiimage. Chcę, aby używany był w stanie pomniejszyć obraz, ponieważ jest to duży obraz. przewijania wystarczy przewijać w pionie, a nie w poziomie.Wyszukanie powiększenia i pomniejszego widoku nie działa poprawnie

przed dodaniem efekt powiększenia miałem następujący kod i to działało jak chciałem,

-(void)viewDidLoad 
{ 
[scrollView setScrollEnabled:YES]; 
[scrollView setContentSize:CGSizeMake(320, 1690)]; 
} 

Więc zrobiłem rozeznanie i skończyło się z następującego kodu, aby umożliwić pinch zoom in i out,

-(void)viewDidLoad 
{ 
scrollView.scrollEnabled = YES; 

[scrollView setContentSize:CGSizeMake(320, 1690)]; 
scrollView.delegate = self; 
// scrollView.contentSize = instImage.frame.size; 
scrollView.minimumZoomScale = scrollView.frame.size.width/instImage.frame.size.width; 
scrollView.maximumZoomScale = 2.0; 
[scrollView setZoomScale:scrollView.minimumZoomScale]; 
[[NSRunLoop currentRunLoop] runMode:NSRunLoopCommonModes beforeDate:[NSDate distantFuture]]; 

} 


- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView { 

return instImage; 
} 


- (CGRect)centeredFrameForScrollView:(UIScrollView *)scroll andUIView:(UIView *)rView { 

CGSize boundsSize = scroll.bounds.size; 
CGRect frameToCenter = rView.frame; 

// center horizontally 
if (frameToCenter.size.width < boundsSize.width) { 

    frameToCenter.origin.x = ((boundsSize.width - frameToCenter.size.width)/2); 

}else { 

    frameToCenter.origin.x = 0; 
} 

return frameToCenter; 
} 


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

instImage.frame = [self centeredFrameForScrollView:scrollV andUIView:instImage];; 
} 

teraz mam następujące problemy i nie mogę dowiedzieć się, co się stało,

  1. , gdy widok jest właśnie ładowany przed jakimkolwiek uszczypnięciem, widok przewijania nie przesuwa się całkowicie do końca obrazu.

  2. po przyciśnięciu, aby powiększyć, przewija w lewo iw prawo oraz w górę iw dół obrazu, ale nadal nie przewija do końca obrazu, ale nadal przewyższa to, co pierwotnie zrobił początek.

  3. Kiedy pomniejszam, wszystko się zatrzymuje. nie można powiększać ani pomniejszać, nie przewija się już więcej. całkowicie zamknięty.

Zrobiłem kilka badań i znalazłem następujący wpis. https://stackoverflow.com/a/6384834/1103257

, ale nie wiem, gdzie można znaleźć NSDefaultRunLoopMode lub nawet jak go szukać, aby dowiedzieć się, czy to rozwiąże, czy nie.

Odpowiedz

5

W końcu to dostałem. To rozwiązanie działa idealnie!

w pliku .h

@interface scrollViewController : UIViewController <UIScrollViewDelegate>{ 

     float oldScale; 

     IBOutlet UIScrollView *scrollView; 
     IBOutlet UIImageView *image; 
} 

@end 

i wystarczy podłączyć obraz do UIImageView, który ma zdjęcie, które chcesz powiększyć i na zewnątrz i wewnątrz jest Scrollview. następnie połącz przewijany widok z Twoim widokiem uiscroll w swoim interfejsie.

w pliku .m

@implementation scrollViewController 


-(void)viewDidLoad 
{ 
[super viewDidLoad]; 

scrollView.scrollEnabled = YES; 
scrollView.minimumZoomScale=1.0; 
scrollView.maximumZoomScale=4.0; 
[scrollView setContentSize:CGSizeMake(320, 1700)]; 
scrollView.delegate=self; 

} 

- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView 
{ 
    return image; 
} 

- (void)scrollViewDidEndZooming:(UIScrollView *)scrollV withView:(UIView *)view atScale:(float)scale 
{ 
    [scrollView setContentSize:CGSizeMake(scale*320, scale*1700)]; 
} 

    @end 

nadzieję, że to pomaga.

+0

Dzięki @Mona. Zmierzyłem się również z tym samym problemem. Mi to pasuje. :) – iKT

1

Oto jak zaimplementować widok przewijania, aby przewinąć wokół dużego obrazu w viewDidLoad

UIImage *img = [UIImage imageNamed:@"image_name.png"]; 
largeImageView = [[UIImageView alloc] initWithImage:img]; 

[self.view insertSubview: largeImageView atIndex:0]; 
[(UIScrollView *)self.view setContentSize:[img size]]; 
[(UIScrollView *)self.view setMaximumZoomScale:2.2]; 
[(UIScrollView *)self.view setMinimumZoomScale:0.3]; 
[(UIScrollView *)self.view setCanCancelContentTouches:YES]; 
[(UIScrollView *)self.view setBounces:YES]; 
[mapImageView setUserInteractionEnabled:YES]; 

Wtedy też metodę viewForZoomingInScrollView:

- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView 
{ 
    return largeImageView; 
} 

funkcję scrollViewDidZoom jest zbędne w tym momencie . Wdrażam coś podobnego do tego, aby obraz był wycentrowany, gdy cały obraz jest widoczny, ale teraz nie martwiłbym się tym, gdybym był tobą.

+0

nie działa zgodnie z oczekiwaniami – Mona

+1

Tylko dla pewności, pracujesz w systemie iOS 5? A twój kontroler widoku jest delegatem ? – atreat

+0

yes na oba pytania – Mona

1

sam problem, ale mam proste obejście, tylko ustawić widok obrazu do interakcji użytkownika włączona:

[self.imageView setUserInteractionEnabled:YES]; 
0

Problem dla mnie było używałem auto-układ i nie zachodziło delegata dla powiększenia UIScrollView. Używałem niestandardowego kontrolera UIViewController, który również był UIScrollViewDelegate. Znalazłem można albo w kodzie ustawić delegata:

func viewDidLoad() { scrollView.delegate = self } 

Albo w serii ujęć ustalonym przez delegata wybrać UIScrolView i inspektora połączeń przeciągnij delegata, aby wskazywał UIViewController.

Powiązane problemy