iPhone sdk Cocoa Touch - 从父母UIView传递给孩子UIScrollview

时间:2009-12-15 13:01:54

标签: iphone cocoa-touch uikit uiview uiscrollview

我在IB中的xib里面有一个UIView,里面是一个小的80x80正方形的UIScrollview,动态加载了8个左右的80 x 80缩略图。

UIScrollview不会剪切图像,使它们向外延伸,因此您可以向左和向右滑动以将所选图像滚动到中心,分页处于打开状态,因此它们会捕捉每个图像。

我已经研究过,发现这是最好的,也可能是唯一的方法。

UIScrollview位于“容器”UIView中有一个原因,它是接收触摸/滑动并将它们传递给它的孩子UIScrollview,否则所有触摸都必须从小的80x80 UIScrollview区域开始让他们成为沿着一排图像的任何地方。

我已经在某处找到了一些示例代码,但是无法实现它。

将我视为菜鸟,从头到尾,如何在IB中设置UIView和UIScrollview以允许任何触摸传递,以及我应该将哪些代码放入哪里?

UIView设置为scroll_container,子UIScrollview设置为char_scroll

目前我已经完成了所有工作,除了从父母传给孩子的接触,此刻接触必须始终在UIScrollview(中心的80x80小盒子)里面开始,当我想成为能够在长480X80水平父UIView中向左或向右滑动,并让它仍然滚动子UIScrollview。

希望你能帮助并理解我的意思!

3 个答案:

答案 0 :(得分:0)

我所有的教诲都说这不是这样做的方式!

即使:

(a)Apple文档说这有用,怎么做;

(b)你可以让hitTest thingummy工作并让UIEvent对象流畅地运行

如果是我,我会期待Apple对操作系统的第一次改变,以破坏代码!

我要做的是:

  • 使用Core Animation API。
  • 当移动的手指让自己离开时,模拟图像的减速度
  • 尝试不同的减速率和不同的捕捉算法(尝试使用和不使用弹跳),直到找到可接受的用户体验(在进入Cocoa Touch之前尝试使用DHTML进行原型设计)
  • 停止使用UIScrollView并简单地使用UIView

你需要在你的州建模:

state1:​​用户在此触摸时请求的(delta x,delta y)位置变化

OR

state2:手指释放后的(delta x,delta y)和(veclocity x,velocity y)和clock()时间,如果图像仍在减速并且没有停下来

state3:图像静止

由此可以计算出动画参数:

初始值:delta-x,delta-y,velocity-x,velocity-y,clock()时间,单位为ms

如果支持弹跳:任何干预转折点

最终:delta-x,delta-y,velocity-x,velocity-y,clock()时间,单位为ms

根据这些动画参数,可以计算一组动画关键帧并将其提供给Core Animation。 (在动画过程中平滑显示自定义减速度需要大量关键帧。)

-

您发现有哪些参考资料可以说明您的建议是最好的方式?

答案 1 :(得分:0)

您可以继承UIScrollView并覆盖-pointInside:withEvent:方法。 UIView的默认实现返回类似CGRectContainsPoint(self.bounds,thePointToTest);.只需测试更广泛的矩形。

答案 2 :(得分:0)

你做这件事的方式主要在那里。我已经尝试将UIView子类化为传递触摸事件,但是我的第一次尝试没有用,我发现了这一点,而不是:How to extend UIScrollView's response area

基本上,子类UIScrollView扩展其hitTest范围。你仍然会包含UIView,但它将是被动的。