代码之家  ›  专栏  ›  技术社区  ›  Dan Ray

分页UIScrollView和偷看邻居页

  •  10
  • Dan Ray  · 技术社区  · 15 年前

    看看iPhone或iPad上的App Store应用程序,特别是屏幕上显示屏幕截图的App细节。屏幕截图查看器向您显示正在查看的屏幕截图,以及下一个和上一个屏幕截图的边缘。我需要实现类似的东西。

    我的做法对穷人来说是公平的:我构建了一个UIScrollView并启用了分页和布局我的内容。我使框架的大小与一页内容相同,但比屏幕小。然后我就残疾了 clipToBounds

    他们是怎么做到的?

    3 回复  |  直到 15 年前
        1
  •  19
  •   Rob    7 年前

    你需要添加一个视图'后面'的滚动视图,其中涵盖了整个地区,你的网页将是可见的。这一观点应该实现-测试:withEvent:. 操作系统将调用此方法来确定在何处路由特定的触摸事件。您只需返回此背景视图中任何点的滚动视图:

    目标-C

    - (UIView *) hitTest: (CGPoint) pt withEvent: (UIEvent *) event {
        if (CGRectContainsPoint(self.bounds, pt)) return self.scrollView;
        return [super hitTest: pt withEvent: event];
    }
    

    Swift 4.0版

    override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? {
        return self.bounds.contains(point) ? self.scrollView : super.hitTest(point, with: event)
    }
    
        2
  •  1
  •   Chris Conover    13 年前

    How To Use UIScrollView to Scroll and Zoom Content

    这段代码确实使用了上面列出的技术,特别是命中测试逻辑。

        3
  •  0
  •   polyclick    14 年前

    如果您将scrollview内容放在一个额外的容器中,那么下面的示例是正确的。如果不是这样,则在子视图上循环并返回被您的触摸击中的子视图。

    - (UIView*)hitTest:(CGPoint)pt withEvent:(UIEvent*)event 
    {
        UIView *contentView = [self.subviews count] ? [self.subviews objectAtIndex:0] : nil;
        return [contentView hitTest:pt withEvent:event];
    }