相关疑难解决方法(0)

UIScrollView的中心内容较小时

我有一个UIImageView内部UIScrollView用于缩放和滚动.如果滚动视图的图像/内容大于滚动视图,则一切正常.但是,当图像变得小于滚动视图时,它会粘在滚动视图的左上角.我想让它保持中心,就像照片应用程序一样.

任何关于在UIScrollView较小时保持居中内容的想法或例子?

我正在使用iPhone 3.0.

以下代码几乎可以使用.如果在达到最小缩放级别后将其捏住,图像将返回到左上角.

- (void)loadView {
    [super loadView];

    // set up main scroll view
    imageScrollView = [[UIScrollView alloc] initWithFrame:[[self view] bounds]];
    [imageScrollView setBackgroundColor:[UIColor blackColor]];
    [imageScrollView setDelegate:self];
    [imageScrollView setBouncesZoom:YES];
    [[self view] addSubview:imageScrollView];

    UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"WeCanDoIt.png"]];
    [imageView setTag:ZOOM_VIEW_TAG];
    [imageScrollView setContentSize:[imageView frame].size];
    [imageScrollView addSubview:imageView];

    CGSize imageSize = imageView.image.size;
    [imageView release];

    CGSize maxSize = imageScrollView.frame.size;
    CGFloat widthRatio = maxSize.width / imageSize.width;
    CGFloat heightRatio = maxSize.height / imageSize.height;
    CGFloat initialZoom = (widthRatio > …
Run Code Online (Sandbox Code Playgroud)

cocoa-touch objective-c uiscrollview uiimageview ios

136
推荐指数
9
解决办法
7万
查看次数

在UIScrollView中设置zoomScale动画时不需要的滚动

执行摘要: 有时UIScrollView会对值进行不必要的更改contentOffset,从而导致应用程序在正在查看的文档中显示错误的位置.不必要的更改与滚动视图的动画更改一起发生zoomScale.

详细信息: 与缩小,当我遇到问题CATiledLayerUIScrollView.该CATiledLayer持有PDF,并在contentOffset一定范围内,当我缩小,将contentOffset被改变(这是BUG)变焦发生之前.在contentOffset似乎在苹果的代码被改变.

为了说明这个问题,我修改了Apple的示例应用程序ZoomingPDFViewer.代码在github上:https://github.com/DirkMaas/ZoomingPDFViewer-bug

点按将导致zoomScale更改为0.5,使用animateWithDuration,因此缩小.如果UIScrollView's contentOffset.y小于约2700或大于5900,则zoomScale动画效果正常.如果contentOffset.y在这两个值之间发生点击,contentOffset.y则会跳转(不动画)到约2700,然后zoomScale动画将发生,但同时会发生滚动,因此当动画完成时,contentOffset.y就是它的位置应该.但跳跃从何而来?

例如,说contentOffset.y屏幕被点击时是2000:zoomScale动画效果很好; contentOffset.y没有改变.

但是如果在contentOffset.y点击屏幕时为4000,那么contentOffset.y将在没有动画的情况下跳转到大约2700,然后缩放和滚动将从该点开始并同时发生.当动画完成时,看起来好像我们从4000直接缩放,所以我们最终在正确的位置,但行为是错误的.

关于用户界面的说明:

  • 文本可以以正常方式垂直滚动
  • 通过正常方式捏合可以放大和缩小文本
  • 单击将导致zoomScale设置为0.5; 变化是动画的

我注意到如果zoomScale大于0.5,那么跳跃不会那么大.此外,如果我使用setZoomScale:animated:而不是animateWithDuration,错误消失,但我不能使用它,因为我需要链接动画.

以下是我所做的总结(github中的代码包含这些更改):

iphone core-animation uiscrollview catiledlayer ios

9
推荐指数
1
解决办法
3546
查看次数