【问题标题】:UIScrollView inside a CALayerCALayer 中的 UIScrollView
【发布时间】:2010-12-15 18:43:08
【问题描述】:

我正在开发某种纸牌游戏,其中我的视图对象(卡片等)都是 CALayers。这些对象作为mainBoard(CALayer)的子层添加,而后者又是mainView[UIView layer] 属性的子层。一切正常,我可以做命中测试,通过mainView类的touchesBegan:withEvent:回调来验证哪个层被正常触摸,等等。

但是,我需要在我的 mainBoard 中滚动以显示“更大”的 CALayer,所以我尝试首先在 CAScrollLayer 中添加“更大”的 CALayer,但我注意到 CAScrollLayer 没有真正滚动(不处理用户输入,也不绘制滚动条)。因此,解决方法是将 UIScrollView 直接添加到 mainView UIView。 UIScrollView 滚动完美,直到我尝试使用 [scrollView.layer addSublayer:<bigger layer>] 向其添加“更大”层。

有人知道如何在 CALayer 中拥有“可滚动”对象吗?

谢谢!

【问题讨论】:

  • 将大图层添加到滚动视图时究竟会发生什么?,此外我认为将子图层直接添加到 scrollView.layer 不是一个好主意,为什么不将它们添加到包含的视图的图层中通过你的滚动视图?
  • 你能定义什么是“更大”的 CALayers 吗?你能简单描述一下为什么“更大”的项目必须是CALayers吗?通过阅读您的问题,我想知道您为什么不保持简单而只使用 UIScrollView - 它具有您所要求的一切,最好不要重新实现。
  • 我的整个应用程序由 CALayers 对象组成,因为我在核心动画级别而不是 UIKit 抽象级别工作。问题是 Core Animation 不提供 Scrollable 组件,所以我不得不做一个解决方法,混合 UIKit 对象 (UIScrollView) 和 CoreAnimation 对象 (CALayers) 并使它们无缝工作。这不是问题,因为 UIKit 只是 CoreAnimation 的包装器。谢谢

标签: iphone ipad uiscrollview calayer


【解决方案1】:

nacho4d 指出了我的问题的答案。 回复标记:“更大”层(边界大于屏幕可用区域的层(因此,需要包含在可滚动区域中))。

解决方案是首先将“更大”的层包裹在 UIView 中:

UIView *wrapperView = ...
[wrapperView.layer addSublayer:<bigger_layer>];

之后,我可以将视图添加为 UIScrollview 的子视图:

[<uiscrollview> addSubview:wrapperView];

// set up scrolling properties
<uiscrollview>.contentSize = <bigger_layer>.frame.size;

问题是我试图直接将“更大”层添加为 UIScrollview 的子层,而是将其包装在 UIView 中并将其添加为子视图。

谢谢

【讨论】:

    猜你喜欢
    • 2020-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-11
    • 2012-03-07
    • 2016-03-15
    • 1970-01-01
    相关资源
    最近更新 更多