久久久久久久av_日韩在线中文_看一级毛片视频_日本精品二区_成人深夜福利视频_武道仙尊动漫在线观看

允許 UIScrollView 及其子視圖都響應(yīng)觸摸

Allow UIScrollView and its subviews to both respond to a touch(允許 UIScrollView 及其子視圖都響應(yīng)觸摸)
本文介紹了允許 UIScrollView 及其子視圖都響應(yīng)觸摸的處理方法,對(duì)大家解決問(wèn)題具有一定的參考價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧!

問(wèn)題描述

我希望我的 UIScrollView 及其子視圖都能接收子視圖內(nèi)的所有觸摸事件.每個(gè)人都可以以自己的方式做出回應(yīng).

I want both my UIScrollView and its subviews to receive all touch events inside the subview. Each can respond in its own way.

或者,如果將點(diǎn)擊手勢(shì)轉(zhuǎn)發(fā)到子視圖,一切都會(huì)好起來(lái)的.

Alternatively, if tap gestures were forwarded to subviews, all would be well.

很多人都在這個(gè)一般領(lǐng)域苦苦掙扎.以下是眾多相關(guān)問(wèn)題中的幾個(gè):

A lot of people are struggling in this general area. Here are a few of the many related questions:

UIScrollView 如何從其子視圖中竊取觸摸
如何從 UIScrollView 竊取觸摸?
如何在 UIScrollView 中取消滾動(dòng)

順便說(shuō)一句,如果我在滾動(dòng)視圖中覆蓋 hitTest:withEvent:,只要 userInteractionEnabled 為 YES,我就會(huì)看到觸摸.但這并不能真正解決我的問(wèn)題,因?yàn)?

Incidentally, if I override hitTest:withEvent: in the scroll view, I do see the touches as long as userInteractionEnabled is YES. But that doesn't really solve my problem, because:

1) 到那時(shí),我不知道是不是水龍頭.
2) 有時(shí)我需要將 userInteractionEnabled 設(shè)置為 NO.

1) At that point, I don't know if it's a tap or not.
2) Sometimes I need to set userInteractionEnabled to NO.

為了澄清,是的,我想將水龍頭與平底鍋區(qū)別對(duì)待.點(diǎn)擊應(yīng)該由子視圖處理.平底鍋可以通過(guò)滾動(dòng)視圖以通常的方式處理.

To clarify, yes, I want to treat taps differently from pans. Taps should be handled by subviews. Pans can be handled by the scroll view in the usual way.

推薦答案

首先,免責(zé)聲明.如果在 UIScrollView 上將 userInteractionEnabled 設(shè)置為 NO,則不會(huì)將觸摸事件傳遞給子視圖.據(jù)我所知,除了一個(gè)例外:在 UIScrollView 的父視圖上攔截觸摸事件,并將這些事件專門(mén)傳遞給 UIScrollView.不過(guò),老實(shí)說(shuō),我不知道你為什么要這樣做.如果你想禁用特定的 UIScrollView 功能(比如......好吧,滾動(dòng)),你可以很容易地做到這一點(diǎn),而無(wú)需禁用 UserInteraction.

First, a disclaimer. If you set userInteractionEnabled to NO on the UIScrollView, no touch events will be passed to the subviews. So far as I'm aware, there's no way around that with one exception: intercept touch events on the superview of the UIScrollView, and specifically pass those events to the subviews of UIScrollView. To be honest, though, I don't know why you would want to do this. If you're wanting to disable specific UIScrollView functionality (like...well, scrolling) you can do that easily enough without disabling UserInteraction.

如果我理解您的問(wèn)題,您需要 UIScrollView 處理點(diǎn)擊事件 并傳遞給子視圖嗎?無(wú)論如何(無(wú)論手勢(shì)是什么),我認(rèn)為您正在尋找的是協(xié)議方法 gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer: 在協(xié)議 UIGestureRecognizerDelegate 中.在您的子視圖中,無(wú)論您擁有什么手勢(shì)識(shí)別器,都在手勢(shì)識(shí)別器上設(shè)置一個(gè)委托(可能是首先設(shè)置 UIGestureReconginzer 的任何類).覆蓋上述方法并返回 YES.現(xiàn)在,該手勢(shì)將與任何其他可能竊取"該手勢(shì)的識(shí)別器一起被識(shí)別(在您的情況下,點(diǎn)擊).使用此方法,您甚至可以微調(diào)您的代碼以僅向子視圖發(fā)送某些類型的手勢(shì)或僅在某些情況下發(fā)送手勢(shì).它給了你很多控制權(quán).請(qǐng)務(wù)必閱讀該方法,尤其是這一部分:

If I understand your question, you need tap events to be processed by the UIScrollView and passed to the subviews? In any case (whatever the gesture is), I think what you're looking for is the protocol method gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer: in the protocol UIGestureRecognizerDelegate. In your subviews, whatever gesture recognizers you have, set a delegate (probably whatever class is setting the UIGestureReconginzer in the first place) on the gesture recognizer. Override the above method and return YES. Now, this gesture will be recognized along with any other recognizers that might have 'stolen' the gesture (in your case, a tap). Using this method you can even fine tune your code to only send certain kinds of gestures to the subviews or send the gesture only in certain situations. It gives you a lot of control. Just be sure to read about the method, especially this part:

識(shí)別手勢(shì)時(shí)調(diào)用該方法手勢(shì)識(shí)別器或其他手勢(shì)識(shí)別器會(huì)阻止其他手勢(shì)識(shí)別器識(shí)別其手勢(shì).注意返回 YES 保證允許同時(shí)識(shí)別;另一方面,返回 NO 并不能保證防止同時(shí)識(shí)別,因?yàn)槠渌謩?shì)識(shí)別器的委托可能會(huì)返回 YES.

This method is called when recognition of a gesture by either gestureRecognizer or otherGestureRecognizer would block the other gesture recognizer from recognizing its gesture. Note that returning YES is guaranteed to allow simultaneous recognition; returning NO, on the other hand, is not guaranteed to prevent simultaneous recognition because the other gesture recognizer's delegate may return YES.

當(dāng)然,有一點(diǎn)需要注意:這只適用于手勢(shì)識(shí)別器.因此,如果您嘗試使用 touchesBegan:、touchesEnded 等來(lái)處理觸摸,您可能仍然會(huì)遇到問(wèn)題.當(dāng)然,您可以使用 hitTest: 將原始觸摸事件發(fā)送到子視圖,但為什么呢?當(dāng)您可以將 UIGestureRecognizer 附加到視圖并免費(fèi)獲得所有這些功能時(shí),為什么要使用 UIView 中的這些方法來(lái)處理事件?如果您需要以標(biāo)準(zhǔn) UIGestureRecognizer 無(wú)法提供的方式處理觸摸,subclass UIGestureRecognizer 并在那里處理觸摸.這樣您就可以獲得 UIGestureRecognizer 的所有功能以及您自己的自定義觸摸處理.我真的認(rèn)為 Apple 打算讓 UIGestureRecognizer 替換開(kāi)發(fā)人員在 UIView 上使用的大部分(如果不是全部)自定義觸摸處理代碼.它允許代碼重用,并且在減輕哪些代碼處理哪些觸摸事件時(shí)更容易處理.

Of course, there's a caveat: This only applies to gesture recognizers. So you may still have problems if you're trying to use touchesBegan:, touchesEnded, etc to process the touches. You can, of course, use hitTest: to send raw touch events on to the subviews, but why? Why process the events using those methods in UIView, when you can attach a UIGestureRecognizer to a view and get all of that functionality for free? If you need touches processed in a way that no standard UIGestureRecognizer can provide, subclass UIGestureRecognizer and process the touches there. That way you get all the the functionality of a UIGestureRecognizer along with your own custom touch processing. I really think Apple intended for UIGestureRecognizer to replace most (if not all) of the custom touch processing code that developers use on UIView. It allows for code-reuse and it's a lot easier to deal with when mitigating what code processes what touch event.

這篇關(guān)于允許 UIScrollView 及其子視圖都響應(yīng)觸摸的文章就介紹到這了,希望我們推薦的答案對(duì)大家有所幫助,也希望大家多多支持html5模板網(wǎng)!

【網(wǎng)站聲明】本站部分內(nèi)容來(lái)源于互聯(lián)網(wǎng),旨在幫助大家更快的解決問(wèn)題,如果有圖片或者內(nèi)容侵犯了您的權(quán)益,請(qǐng)聯(lián)系我們刪除處理,感謝您的支持!

相關(guān)文檔推薦

iOS - Using storyboard and autolayout to center the UIScrollView(iOS - 使用故事板和自動(dòng)布局使 UIScrollView 居中)
get index or tag value from imageview tap gesture(從 imageview 點(diǎn)擊手勢(shì)獲取索引或標(biāo)簽值)
UIScrollView not scrolling regardless of large contentSize(無(wú)論內(nèi)容大小如何,UIScrollView 都不會(huì)滾動(dòng))
Clean autorotation transitions in a paging UIScrollView(清除分頁(yè) UIScrollView 中的自動(dòng)旋轉(zhuǎn)轉(zhuǎn)換)
UIScrollView zooming with Auto Layout(UIScrollView 使用自動(dòng)布局縮放)
How to create an image from a UIView / UIScrollView(如何從 UIView/UIScrollView 創(chuàng)建圖像)
主站蜘蛛池模板: 亚洲欧美一区二区三区视频 | 欧美日韩一 | 久久精品免费观看 | 97avcc| 免费在线观看毛片 | 亚洲精品久久久一区二区三区 | 91在线免费视频 | 亚洲激情网站 | 国产精品视频免费看 | 中文字幕在线不卡播放 | 精品成人免费一区二区在线播放 | 成人在线h | 久久电影一区 | 我想看国产一级毛片 | 欧美性久久 | 精品自拍视频 | 密色视频 | 在线色| 激情福利视频 | 99精品欧美一区二区蜜桃免费 | 欧美高清视频一区 | 国产综合精品一区二区三区 | 国产综合精品一区二区三区 | 久久亚洲一区 | 狠狠久久久| 日本三级电影在线看 | 亚洲精品欧美 | 精品二区视频 | 日韩亚洲欧美一区 | 精品欧美色视频网站在线观看 | 免费一区 | av免费成人 | 欧美国产日韩在线观看 | 久久精品国产一区老色匹 | 国产成人精品免费 | 日韩精品一区二区三区中文字幕 | 精品在线播放 | 欧美中文字幕一区二区三区 | 久久精品无码一区二区三区 | 国产精品久久久久久久久久不蜜臀 | 色毛片 |