2017-02-18 4 views
1

Я относительно новичок в Xcode и в процессе создания приложения в Objective C с несколькими viewControllers каждый с одним UIScrollView, содержащим один UIImage, который можно масштабировать и прокручивать.Как получить viewForZoomingInScrollView для работы с несколькими UIViewControllers в Xcode?

Этот код работает для первого изображения (дерматомы), но я не могу понять, как настроить UIView, чтобы включить масштабирование и прокрутку на втором изображении (anatomicPlanes). В настоящее время второе изображение правильно импортируется во второй UIScrollView, но когда я пытаюсь увеличить масштаб, он просто прыгает вниз и вправо и остается там статическим.

Размер UIScrollViews был задан с помощью Interface Builder, без проблем.

viewController.h:

#import <UIKit/UIKit.h> 

@interface ViewController : UIViewController <UIScrollViewDelegate> { 

    IBOutlet UIScrollView *dermatomeScrollView; 
    UIImageView *dermatomesImageView; 
    IBOutlet UIScrollView *anatomicPlaneScrollView; 
    UIImageView *anatomicPlanesImageView; 
} 

@property (strong, nonatomic) IBOutlet UIScrollView *dermatomeScrollView; 

@property (strong, nonatomic) IBOutlet UIImageView *dermatomesImageView; 

@property (strong, nonatomic) IBOutlet UIImageView *anatomicPlanesImageView; 

@property (strong, nonatomic) IBOutlet UIScrollView *anatomicPlaneScrollView; 

@end 

viewController.m

#import "ViewController.h" 
@interface ViewController() 

@end 

@implementation ViewController 

@synthesize dermatomeScrollView, anatomicPlanesImageView, dermatomesImageView, anatomicPlaneScrollView; 

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

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    UIImageView *dermatomes = [[UIImageView alloc] 
            initWithImage:[UIImage imageNamed:@"dermatomes.jpg"]]; 

    self.dermatomesImageView = dermatomes; 
    dermatomeScrollView. maximumZoomScale = 1.2; 
    dermatomeScrollView. minimumZoomScale = 0.4; 
    dermatomeScrollView. delegate = self; 
    [dermatomeScrollView addSubview:dermatomesImageView]; 
    dermatomeScrollView.zoomScale = 0.6; 

    UIImageView *planes = [[UIImageView alloc] 
           initWithImage:[UIImage imageNamed:@"anatomic planes.jpg"]]; 
    self.anatomicPlanesImageView = planes; 
    anatomicPlaneScrollView. maximumZoomScale = 1.2; 
    anatomicPlaneScrollView. minimumZoomScale = 0.4; 
    anatomicPlaneScrollView. delegate = self; 
    [anatomicPlaneScrollView addSubview:anatomicPlanesImageView]; 
    anatomicPlaneScrollView.zoomScale = 0.6; 
} 

Любая помощь приветствуется!

ответ

0

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

- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView { 
    if (scrollView == dermatomeScrollView) { 
     return dermatomesImageView; 
    } 

    return anatomicPlanesImageView; 
} 

Если добавить больше scrollviews, вы должны продлить этот метод в дальнейшем.

+0

Спасибо! Это именно то, что я искал (интуитивный теперь, когда я это вижу, но мне это не приходило). – Nate

+0

Отлично! Рад, что это сработало для вас! Не забудьте принять мой ответ. :) –

+0

Выполнено. И в случае, если кто-то еще сталкивается с этой проблемой, чтобы предотвратить ошибку «элемент управления может дойти до конца не-void», добавьте предложение else {return nil;} – Nate

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