2010-12-15 51 views
0

我正在开发某种卡片游戏,其中我的视图对象(卡片等)都是CALayer。这些对象被添加为mainBoard(CALayer)的子图层,而该子图层又是mainView[UIView layer]属性的子图层。一切正常,我可以做正确的测试,以确认通过mainView类的touchesBegan:withEvent:回调正常触摸哪个图层,依此类推。CALayer内的UIScrollView

不过,我需要让我的mainBoard内滚动显示“做大” CALayers,所以我第一次尝试将“做大”的CALayer一个CAScrollLayer里面,但我注意到,CAScrollLayer并没有真正滚动(没有按”处理用户输入,既不绘制滚动条)。所以,解决方法是直接将UIScrollView添加到mainView UIView。 UIScrollView完美滚动,直到我尝试使用[scrollView.layer addSublayer:<bigger layer>]将“更大”图层添加到它。

有没有人有任何想法,我怎么可以有一个CALayer“可滚动”的对象?

谢谢!

+1

增加大层滚动视图时,除此之外,我认为直接添加子层scrollView.layer到底发生了什么?是不是一个好主意,你为什么不把它们添加到包含视图的层通过你的滚动视图? – nacho4d 2010-12-15 19:00:26

+0

你可以定义什么是“更大”的CALayers?你能简单地描述为什么“更大”的物品必须是CALayers?通过阅读你的问题,我想知道你为什么不简单地使用UIScrollView - 它包含了你所要求的一切,最好不要重新实现。 – Mark 2011-01-17 18:22:38

+0

我的整个应用程序由CALayers对象组成,因为我正在使用Core Animation级别而不是UIKit抽象级别。问题是,核心动画不提供滚动组件,所以我不得不做一个变通方法混合的UIKit对象(UIScrollView中)和CoreAnimation对象(CALayers),使它们无缝地工作。这不是一个问题,因为UIKit只是CoreAnimation的一个包装。谢谢 – 2011-01-20 13:23:49

回答

0

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中,并将其添加为子视图。

感谢