簡體   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