【问题标题】:Prevent UIScrollView from moving contents to top-left防止 UIScrollView 将内容移动到左上角
【发布时间】:2011-07-16 02:43:39
【问题描述】:

我有一个 UIImageView 包含在 UIScrollView 中。图像(通常)很大,因此用户可以将其缩小以查看整个图像。

不过,在缩小时,UIScrollView 会将ImageView 捕捉到滚动视图的左上角。我希望它可以被用户定位,但还没有找到“关闭它”的方法。

这有点像总是允许滚动,而不是只在图像放大时才允许滚动。也许它的变化太大了?

有人知道方法吗?最初,我只是要手动创建此功能。但是 UIImageViews 不喜欢调整到新的尺寸(我已经尝试了所有方法并且无法让 UIImageView 调整大小,除非我从 imageView 中删除图片,更改框架并重新添加它)。

【问题讨论】:

    标签: objective-c xcode ios uiscrollview uiimageview


    【解决方案1】:

    我最终禁用了UIScrollViewpanGestureRecognizer 并加入了自定义的。

    这里有一个关于如何禁用它的快速 sn-p:

    // Disable our GestureRecognizer
    for (UIGestureRecognizer *gesture in scrollView.gestureRecognizers){
        if ([[NSString stringWithFormat:@"%@",[gesture class]] isEqualToString:@"UIScrollViewPanGestureRecognizer"]){
            [gesture setEnabled:NO];
            break;
        }
    }
    

    那里有点麻烦,但这是因为UIScrollViews 已将 GestureRecognizer 的类更改为“UIScrollViewPanGestureRecognizer”。如果您尝试使用该类,编译器会对您大喊大叫(那里可能有更好的解决方案)。

    【讨论】:

    • if ([gestureRecogniser isMemberOfClass:NSClassFromString(@"UIScrollViewPanGestureRecognizer")])
    • if ([gestureRecogniser isKindOfClass:NSClassFromString(@"UIScrollViewPanGestureRecognizer")])
    • 从 iOS 5 开始,UIScrollView 上有一个 panGestureRecognizer 属性可以避免这种黑客攻击。 developer.apple.com/library/ios/documentation/UIKit/Reference/…
    • 在禁用手势识别器后您使用的自定义方法有任何提示吗?缩小后将图像居中没有问题。但我不想把它放在中心。我想让用户定位图像,无论是放大还是缩小。任何帮助表示赞赏。
    【解决方案2】:

    如果您将UIImageView 定位在UIScrollView 中的位置0,0,那么它总是在左上角。如果您希望它在小于视图时在滚动视图中居中,则需要将其定位在那里。检查它的-size 是大于还是小于滚动视图的。如果它小于滚动视图,请将其-center 设置为与滚动视图相同。

    【讨论】:

    • 这非常适合将 UIImageView 保持在 scrollView 的中心,但我想知道您是否知道一种方法可以将 UIImageView 保持在它被拖动到的位置,而不是重新回到中心?
    猜你喜欢
    • 2017-08-16
    • 1970-01-01
    • 2020-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多