Ios 目标C-无法缩放嵌入UIScrollView的UIImageView

Ios 目标C-无法缩放嵌入UIScrollView的UIImageView,ios,objective-c,uiscrollview,zooming,Ios,Objective C,Uiscrollview,Zooming,我是这里新来的孩子。很高兴认识你们 我正在尝试实现Ray Wenderlich对UIScrollView的缩放,如下所述: 但这似乎对我不起作用。我想做的是: 从nib创建UIImageView 将UIImageView添加到UIScrollView 如果应用程序是从iPad上执行的,则从图像中心以2的比例放大视图 这是我的密码: - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup af

我是这里新来的孩子。很高兴认识你们

我正在尝试实现Ray Wenderlich对UIScrollView的缩放,如下所述:

但这似乎对我不起作用。我想做的是:

  • 从nib创建UIImageView
  • 将UIImageView添加到UIScrollView
  • 如果应用程序是从iPad上执行的,则从图像中心以2的比例放大视图
这是我的密码:

- (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:
ScrollViewDiEndZooming:withView:atScale:
、和
scrollViewDidZoom:
中的日志没有被调用,这意味着我们根本没有进行缩放(CMIIW)。我添加了UIScrollViewDelegate,因此它应该可以工作


你们能帮帮我吗?我已经按照正确的步骤做了,伊姆霍。所以我现在迷路了。非常感谢。

您是否设置了UIScrollView的委托属性

我在您发布的代码中没有看到这一点,尽管您可以在Interface Builder上完成

如果是这种情况,这将使您的方法被调用:

mapScrollView.delegate = self;
有关详细信息,请查看委托属性部分的UIScrollView文档


谢谢。这为我解决了问题。:)我想我错过了那篇文章的一个步骤。我必须从情节提要中设置代理的那个。我真傻,没问题!这是每个人都犯过的错误。干杯