繁体   English   中英

iPhone SDK Cocoa Touch-将触摸从父UIView传递到子UIScrollview

[英]iPhone sdk Cocoa Touch - Pass touches down from parent UIView to child UIScrollview

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

UIScrollview不会裁剪图像,因此它们可以向两侧伸出,因此您可以左右滑动以将所选图像滚动到中间,分页处于打开状态,因此它们可以捕捉每个图像。

我进行了研究,发现这是最好的方法,可能也是唯一的方法。

由于一个原因,UIScrollview位于“容器” UIView中,它在那里接收触摸/滑动并将它们传递给UIScrollview的子控件,否则所有触摸都必须在80x80的UIScrollview小区域开始,我希望它们在图像行中的任何位置。

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

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

UIView设置为scroll_container,子UIScrollview为char_scroll

目前,除了将触摸从父母传递给孩子之外,其他所有操作都正常,并且现在,当我希望能够滑动时,触摸必须始终在UIScrollview(居中的80x80小框)内开始在水平480X80长父UIView中向左或向右移动,并仍可滚动子UIScrollview。

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

我所有的指示都说这不是做到这一点的方法!

即使:

(a)苹果医生说这可行并且如何做到;

(b),您可以使hitTest正常运行,并使UIEvent对象流畅地运行

如果是我,我希望Apple对操作系统进行的首次更改会破坏代码!

我要做的是:

  • 使用Core Animation API。
  • 当移动的手指自己放开图像时,对图像的减速度进行建模
  • 尝试不同的减速速率和不同的捕捉算法(尝试有无跳动),直到找到可接受的用户体验为止(进入Cocoa Touch之前尝试在DHTML中进行原型制作)
  • 停止使用UIScrollView并仅使用UIView

您需要在您的状态下建模:

state1:​​用户在此触摸上请求的(delta x,delta y)位置更改

要么

state2:如果图像仍在减慢并且无法静止,则释放时手指的(增量x,增量y)和(速度x,速度y)和clock()时间

state3:图像静止

由此可以计算动画参数:

初始值:增量x,增量y,速度x,速度y,clock()时间(以毫秒为单位)

如果支持弹跳:任何中间转折点

最终:delta-x,delta-y,x速度,y速度,clock()时间(以毫秒为单位)

根据这些动画参数,可以计算出一组动画关键帧并将其馈送到Core Animation。 (要在动画过程中平滑显示自定义减速度,必须使用大量关键帧。)

-

您找到了哪些参考来说出您的建议是最好的方法?

您可以子类化UIScrollView并重写-pointInside:withEvent:方法。 UIView的默认实现返回类似CGRectContainsPoint(self.bounds,thePointToTest);的信息。 只需在更宽的矩形上进行测试即可。

您的操作方式大部分都在那儿。 我尝试将UIView子类化以向下传递触摸事件,但是我的第一次尝试没有起作用,而是找到了这一点: 如何扩展UIScrollView的响应区域

基本上,子类UIScrollView可以扩展其hitTest范围。 您仍将具有包含的UIView,但是它将是被动的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM