2017-02-18 1 views
1

私は比較的新しいXcodeです。Objective Cで複数のviewControllerを使用してアプリケーションを作成する過程で、それぞれ単一のUIImageを含む1つのUIScrollViewにズームしてスクロールすることができます。Xcodeの複数のUIViewControllerでviewForZoomingInScrollViewを動作させる方法を教えてください。

このコードは最初の画像(デルマトーム)で機能しますが、2番目の画像(anatomicPlanes)のズームとスクロールを可能にするためにUIViewを調整する方法を理解できません。現在のところ、2番目のイメージは2番目の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

完了。他の誰かがこの問題に遭遇した場合、「制御が非空白関数の終わりに達する可能性がある」というエラーを防ぐためにelse {return nil;}節を追加してください – Nate

関連する問題