2014-10-09 1 views
2

Я новый парень на этом блоке. Приятно с вами познакомиться.Цель C - Невозможно увеличить UIImageView, встроенный в UIScrollView

Я пытаюсь реализовать зуммирование Ray Wenderlich какого-либо права UIScrollView, который был описан здесь:

http://www.raywenderlich.com/10518/how-to-use-uiscrollview-to-scroll-and-zoom-content

Но казалось, что это не работает для меня. То, что я хотел бы сделать, это:

  • Создайте UIImageView из наконечника.
  • Добавить UIImageView в UIScrollView.
  • Увеличьте его в центре изображения со шкалой 2 в начале представления, если приложение выполнено с iPad.

Вот мой код:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view. 

    //Hide the status bar 
    [[UIApplication sharedApplication] setStatusBarHidden:YES]; 

    //------------------------------ 
    //Initialize the image view of the home screen 
    _mapView = (TM_MapView *)[[[NSBundle mainBundle]loadNibNamed:@"MapView" owner:self options:nil]objectAtIndex:0]; 

    // set the content size to be the size our our whole frame 
    mapScrollView.contentSize = _mapView.imageView.image.size; 
    [mapScrollView setScrollEnabled:YES]; 

    //set the selector for the buttons in the map view 
    [self setButtonsSelector]; 

    // now add our scroll view to the main view 
    [mapScrollView addSubview:_mapView]; 
    //------------------------------ 

    NSLog(@"_mapView.imageView.frame: %@", NSStringFromCGRect(_mapView.imageView.frame)); 
    NSLog(@"_mapView.imageView.image.size: %@", NSStringFromCGSize(_mapView.imageView.image.size)); 
NSLog(@"mapScrollView.contentSize: %@", NSStringFromCGSize(mapScrollView.contentSize)); 

} 

-(void)viewWillAppear:(BOOL)animated 
{ 
    mapScrollView.minimumZoomScale = 1.0f; 
    mapScrollView.maximumZoomScale = 2.5f; 
    mapScrollView.zoomScale = 1.0f; 

    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) 
    { 
     [self zoomOnStart]; 
    } 
} 

-(void)zoomOnStart 
{ 
    NSLog(@"Zooming on start"); 
    CGPoint zoomPoint = CGPointMake(512.0f, 384.0f); 

    CGFloat newZoomScale = 2.0f; 

    CGSize scrollViewSize = self.mapScrollView.bounds.size; 

    CGFloat w = scrollViewSize.width/newZoomScale; 
    CGFloat h = scrollViewSize.height/newZoomScale; 
    CGFloat x = zoomPoint.x - (w/2.0f); 
    CGFloat y = zoomPoint.y - (h/2.0f); 

    CGRect rectToZoomTo = CGRectMake(x, y, w, h); 
    //CGRect rectToZoomTo = CGRectMake(300, 300, 200, 100); 

    NSLog(@"rectToZoomTo: %@", NSStringFromCGRect(rectToZoomTo)); 

    [self.mapScrollView zoomToRect:rectToZoomTo animated:YES]; 

} 

#pragma mark - Delegates 
-(UIView*)viewForZoomingInScrollView:(UIScrollView*)scrollView 
{ 
    NSLog(@"Scroll View viewForZoomingInScrollView"); 
    return _mapView; 
} 

-(void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(CGFloat)scale 
{ 
    NSLog(@"Scroll View End Zooming!"); 
} 

-(void)scrollViewDidZoom:(UIScrollView *)scrollView 
{ 
    NSLog(@"Scroll View Zoom changed to: %f", scrollView.zoomScale); 
} 

Как вы можете видеть, я вошел некоторые из кадров и делегатов, чтобы увидеть вход для масштабирования и посмотреть, будут ли мы или нет масштабирования. Вот журналы консоли:

2014-10-09 17:24:18.507 TrueMuzeiOS[13268:60b] _mapView.imageView.frame: {{0, 0}, {1024, 768}} 
2014-10-09 17:24:18.511 TrueMuzeiOS[13268:60b] _mapView.imageView.image.size: {1024, 768} 
2014-10-09 17:24:18.513 TrueMuzeiOS[13268:60b] mapScrollView.contentSize: {1024, 768} 
2014-10-09 17:24:18.519 TrueMuzeiOS[13268:60b] Zooming on start 
2014-10-09 17:24:18.521 TrueMuzeiOS[13268:60b] rectToZoomTo: {{320, 128}, {384, 512}} 

Как вы можете видеть, журналы внутри viewForZoomingInScrollView:, scrollViewDidEndZooming:withView:atScale: и scrollViewDidZoom: не дозвонились, то есть мы не масштабирование на всех (CMIIW). Я добавил UIScrollViewDelegate, чтобы он работал.

Итак, вы можете мне помочь? Я правильно выполнил шаги, ИМХО. Так что теперь я потерялся. Заранее большое спасибо.

ответ

2

Вы задаете свойство делегата UIScrollView?

Я не вижу этого в опубликованном вами коде, хотя вы могли бы сделать это в интерфейсе Builder.

Если это так, просто это сделало бы ваши методы дозвонились:

mapScrollView.delegate = self; 

Проверьте документацию UIScrollView на участке делегата собственности для получения дополнительной информации.

https://developer.apple.com/library/ios/documentation/uikit/reference/uiscrollview_class/index.html#//apple_ref/occ/instp/UIScrollView/delegate

+0

спасибо. Это решило это для меня. :) Я думаю, что пропустил один из шагов этой статьи. Тот, где я должен установить делегата из раскадровки. Дурак я. –

+0

Не проблема! Это ошибка, которую все сделали. Ура! – cris

Смежные вопросы