2009-12-15 89 views
1

我有一个UIBiew在我的xib在IB和里面,这是一个UIScrollview是一个小的80x80正方形和动态加载8个左右80 x 80缩略图图像。iPhone sdk可可触摸 - 通过触摸从父母的UIView到孩子UIScrollview

UIScrollview不裁剪图像,以便它们伸出任何一边,因此您可以左右滑动以将选定的图像滚动到中心,分页处于打开状态,以便捕捉每个图像。

我研究并发现这是最好的,也可能是唯一的方法来做到这一点。

由于某种原因,UIScrollview位于“容器”UIView中,出现这种情况的原因是接收触摸/滑动并将它们传递给它的子UIScrollview,否则所有触摸都必须从小的80x80 UIScrollview区域开始,我希望他们能够在这排影像中的任何地方。

我已经看到了一些示例代码的地方做这个,但只是不能实现它。

把我当作noob,从头到尾开始,应该如何在IB中设置UIView和UIScrollview以允许任何接触被传递,以及我应该将哪些代码放到哪里?

UIView的被设置为scroll_container和孩子的UIScrollView是char_scroll

在我已经得到了这一切,除了从父母给孩子传递的接触工作的时刻,此刻倒是有当我希望能够在长480X80横向父级UIView中向左或向右滑动并且仍然滚动子级UIScrollview时,始终在UIScrollview(中心的小型80x80框)内启动。

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

回答

0

我的所有经验都说这不是做这件事的方法!

即使:

(一)苹果文档说这个工程,以及如何做到这一点;

(B),你可以得到的则hitTest thingummy工作,并得到的UIEvent对象很好

流动如果是我,我会想到第一个变化让苹果的OS打破代码!

我会做的是:

  • 使用的Core Animation API。
  • 模型图像的减速,当移动手指放开他们自己
  • 尝试减速和不同的捕捉算法(尝试与不反弹),直到你找到一个可接受的用户体验的不同速率(尝试在DHTML原型之前进入可可触摸)
  • 停止使用的UIScrollView,只需使用一个UIView

您需要在您的状态模型:

状态1:在(增量X,增量Y)的位置变化要求用户在这个触摸

OR

状态2:在(增量X,增量Y)和(veclocity X,速度Y)和时钟()手指的时候发布,如果图像仍在放缓,而不是来休息

STATE3:图像静止

从该动画参数可被计算:

初始:在毫秒增量x,增量y,速度-X,速度-Y,时钟()时间

如果支撑弹跳:任何居间转折点

决赛:增量x,增量y,速度-X,速度-Y,时钟()时间(ms)

而且从这些动画参数,一组的动画关键帧可以计算并输入到Core Animation。 (大量的关键帧是必要的动画过程顺利显示自定义的减速。)

-

什么是你发现说你的建议是什么是最好的方式引用?

0

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

0

你这样做的方式主要是在那里。我试过继承UIView传递触摸事件,但我的第一次尝试没有奏效,我发现这个,而不是:How to extend UIScrollView's response area

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