1

ズームインできませんUIScrollView。したがって、問題は、パンが完全に機能していることです。ただし、ピンチとズームは機能しません。私が想定する理由は、私には代理人がいないからです。

私のアプローチ:

  1. 私はデリゲートを使おうとしていますが、私が思いついた唯一の解決策はscrollView.delegate=self

  2. に何かを含める必要があることは理解していますが、それViewController.hをどのように配置@property UIScrollView *scrollView;してズーム機能に接続するのかわかりません。

私は正しい方向に進んでいると思いますが、どこに接続するかについての提案は高く評価されています。

ViewController.h

#import <UIKit/UIKit.h>
@interface ViewController : UIViewController
@end

ViewController.m

@implementation ViewController

- (void)viewDidLoad
{
    [super viewDidLoad];

    UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:
    CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)];

    scrollView.delegate = self;
    CGSize containerSize = CGSizeMake(1280, 1280);
    UIView *containerView = [[UIView alloc] initWithFrame:(CGRect)    {.origin=CGPointMake(0.0f, 0.0f), .size=containerSize}];
    containerView.backgroundColor = [UIColor grayColor ];
    [scrollView addSubview:containerView];


    // Set up our custom view hierarchy
    UIView *redView = [[UIView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 640.0f, 80.0f)];
    redView.backgroundColor = [UIColor redColor];
    [containerView addSubview:redView];

    UIView *blueView = [[UIView alloc] initWithFrame:CGRectMake(0.0f, 560.0f, 640.0f, 80.0f)];
    blueView.backgroundColor = [UIColor blueColor];
    [containerView addSubview:blueView];

    UIView *greenView = [[UIView alloc] initWithFrame:CGRectMake(160.0f, 160.0f, 320.0f, 320.0f)];
    greenView.backgroundColor = [UIColor greenColor];
    [containerView addSubview:greenView];

    UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"slow.png"]];
    imageView.center = CGPointMake(320.0f, 320.0f);
    [containerView addSubview:imageView];
    scrollView.panGestureRecognizer.minimumNumberOfTouches=2;
    CGSize containerSize2 = CGSizeMake(640, 640);
    scrollView.contentSize=containerSize2;

    CGRect viewRect = CGRectMake(self.view.bounds.origin.x, self.view.bounds.origin.y,  self.view.bounds.size.width, self.view.bounds.size.height);

    [self.view addSubview:scrollView];

}

- (UIView*)viewForZoomingInScrollView:(UIScrollView *)scrollView {
    // Return the view that we want to zoom
    return self.containerView; //This gives error. 
}
4

3 に答える 3

0

問題は、を追加しなかった可能性がありますviewForZoomingInScrollView

UIScrollViewクラスには、UIScrollViewDelegateプロトコルを採用する必要があるデリゲートを含めることができます。ズームとパンを機能させるには、デリゲートはviewForZoomingInScrollView:とscrollViewDidEndZooming:withView:atScale:;の両方を実装する必要があります。さらに、最大(maximumZoomScale)と最小(minimumZoomScale)のズームスケールは異なっている必要があります。

したがって、これを追加します。

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

こちらのドキュメントから詳細を読む

于 2013-02-24T04:29:52.987 に答える
0

適切なズームスケールを提供するだけです。

scrollView.maximumZoomScale = 2.0; //Anything greater than 1.0 will allow you to zoom in
于 2013-02-24T05:24:05.320 に答える
0

私の質問を解決した回答: ViewRect() の後に viewDidLoad() にこのコードを追加します

CGRect viewRect = CGRectMake(self.view.bounds.origin.x, self.view.bounds.origin.y,  self.view.bounds.size.width, self.view.bounds.size.height);

CGRect scrollViewFrame = scrollView.frame;
CGFloat scaleWidth = scrollViewFrame.size.width / scrollView.contentSize.width;
CGFloat scaleHeight = scrollViewFrame.size.height / scrollView.contentSize.height;
CGFloat minScale = MIN(scaleWidth, scaleHeight);

scrollView.minimumZoomScale = minScale;
scrollView.maximumZoomScale = 1.0f;
scrollView.zoomScale = minScale;

これは、viewController.h が次のようになるはずです。

@interface ViewController ()
@property UIView *containerView;
@end
@implementation ViewController

@synthesize containerView = _containerView;
于 2013-02-24T19:34:57.853 に答える