pbootcms网站模板|日韩1区2区|织梦模板||网站源码|日韩1区2区|jquery建站特效-html5模板网

UIScrollView 只能用一根手指滾動

UIScrollView scrolling only with one finger(UIScrollView 只能用一根手指滾動)
本文介紹了UIScrollView 只能用一根手指滾動的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!

問題描述

iOS7 &iOS8

iOS7 & iOS8

我需要在 UIScrollview 中禁用兩指或三指滾動.

I need to disable 2 or three fingers scrolling in UIScrollview.

我試過了:

[self.scrollView.panGestureRecognizer setMaximumNumberOfTouches:1];
[self.scrollView.panGestureRecognizer setMinimumNumberOfTouches:1];

但它沒有效果.仍然可以用兩根手指滾動.

But it has no effect. It is still possible to scroll with 2 fingers.

如果我嘗試將 max 和 min 設置為 2.一個手指滾動被禁用但 3 個手指滾動可能:(

If i tried to set max and min to 2. One finger scrolling was disabled but 3 fingers scrolling possible :(

我也試過了,但沒有成功:

I tried this too, but without success:

for (UIGestureRecognizer* pan in self.scrollView.gestureRecognizers) {
        OTTNSLog(@"touches: %ld", (unsigned long)pan.numberOfTouches);
        if ([pan isKindOfClass:[UIPanGestureRecognizer class]])
        {
            UIPanGestureRecognizer *mpanGR = (UIPanGestureRecognizer *) pan;
            mpanGR.minimumNumberOfTouches = 1;
            mpanGR.maximumNumberOfTouches = 1;

        }

        if ([pan isKindOfClass:[UISwipeGestureRecognizer class]])
        {
            UISwipeGestureRecognizer *mswipeGR = (UISwipeGestureRecognizer *) pan;
            mswipeGR.numberOfTouchesRequired = 1;
        }

    }

有人知道,它是如何解決這個問題的嗎?

Does anybody know, how it solve this ?

謝謝.

推薦答案

問題:

UIPanGestureRecognizerUIScrollView 的底層時 - 不幸的是,這也會影響 UIPageViewController - maximumNumberOfTouches 未按預期運行,minimumNumberOfTouches 但是總是正確地限制下限.

When the UIPanGestureRecognizer is underlying a UIScrollView - which unfortunately does also effect UIPageViewController - the maximumNumberOfTouches is not behaving as expected, the minimumNumberOfTouches however always limits the lower end correctly.

在監控這些參數時,它們會報告正確的值——它們似乎在做自己的工作——只是 UIScrollView 本身不尊重它們并忽略它們的設置!

When monitoring these parameters they report back correct values - they seem to do their job - it's just that UIScrollView itself doesn't honor them and ignores their settings!

解決方案:

minimumNumberOfTouches 設置為所需的值,例如1 和 - 非常重要 - maximumNumberOfTouches 到 2 !!!

Set the minimumNumberOfTouches to the desired value e.g. 1 and - very importantly - the maximumNumberOfTouches to 2 !!!

myScrollView.panGestureRecognizer.minimumNumberOfTouches = 1;
myScrollView.panGestureRecognizer.maximumNumberOfTouches = 2;

在滾動視圖的@interface 聲明中符合 UIGestureRecognizerDelegate 協議.您不必為 UIScrollView 設置 panGestureRecognizer.delegate !!!委托已經設置,因為 UIScrollView 需要是它自己的 pan/pinchGestureRecognizer 的委托.

Conform to the UIGestureRecognizerDelegate protocol in your scrollView's @interface declaration. You don't have to set the panGestureRecognizer.delegate for a UIScrollView!!! The delegate is already set because UIScrollView requires to be the delegate of its own pan/pinchGestureRecognizer.

然后實現UIGestureRecognizer委托方法:

- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer {

    NSLog(@"%d", gestureRecognizer.numberOfTouches);
    NSLog(@"%@", gestureRecognizer.description);

        if (gestureRecognizer == self.panGestureRecognizer) {
            if (gestureRecognizer.numberOfTouches > 1) {
                return NO;
            } else {
                return YES;
            }
        } else {
            return YES;
        }
    }
}

<小時>

更安全的版本:

如果您有一個自定義的 scrollView 類并且想要非常安全,您還可以再添加一行代碼來消除與其他 scrollView 的歧義:

If you have a custom scrollView class and wanna be on the VERY safe side you can also add one more line of code to disambiguate against other scrollViews:

- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer {

    NSLog(@"%d", gestureRecognizer.numberOfTouches);
    NSLog(@"%@", gestureRecognizer.description);

    if ([gestureRecognizer.view isMemberOfClass:[MY_CustomcrollView class]]) {
        if (gestureRecognizer == self.panGestureRecognizer) {
            if (gestureRecognizer.numberOfTouches > 1) {
                return NO;
            } else {
                return YES;
            }
        } else {
            return YES;
        }
    } else {
        return YES;
    }
}

<小時>

附加信息:

NSLog 告訴您觸摸的次數.如果您將 minmax 設置為相同的值(如上例中的 1),if-loop 永遠不會被觸發... ;-)

The NSLogs tell you the number of touches. If you set both the min and max to the same value (like 1 in the example above) the if-loop would never be triggered... ;-)

這就是為什么 maximumNumberOfTouches 必須至少為 minimumNumberOfTouches + 1

That is why maximumNumberOfTouches has to be at least minimumNumberOfTouches + 1

panGestureRecognizer.minimumNumberOfTouches = 1;
panGestureRecognizer.maximumNumberOfTouches = minimumNumberOfTouches + 1;

<小時>

極客部分:

for (UIView *view in self.view.subviews) {
    if ([view isKindOfClass:[UIScrollView class]]) {
        NSLog(@"myPageViewController - SCROLLVIEW GESTURE RECOGNIZERS: %@", view.gestureRecognizers.description);
        ((UIPanGestureRecognizer *)view.gestureRecognizers[1]).minimumNumberOfTouches = 1;
        ((UIPanGestureRecognizer *)view.gestureRecognizers[1]).maximumNumberOfTouches = 2;
    }
}

這是訪問負責 UIPageViewController 分頁的底層滾動視圖的方法.將此代碼放在例如UIPageViewController(自身)的viewDidLoad:.

如果您根本無法訪問滾動視圖 - 就像動態 UITableViewCell 中的 UIPageViewController 在運行時發生創建和單元重用并且沒有插座可以在其 contentViews 上設置 - 在 UIScrollView 上放置一個類別并在那里覆蓋委托方法.不過要小心!這會影響您的應用程序中的每個滾動視圖 - 所以要像上面的更安全"示例中那樣進行適當的自省(類檢查)...... ;-)

If you don't have access to the scrollView at all - like for a UIPageViewController in a dynamic UITableViewCell where creation and cell reuse happens at runtime and no outlets can be set on its contentViews - put a category on UIScrollView and override the delegate method there. But be careful! This effects every scrollView in your application - so do proper introspection (class-checking) like in my 'EVEN SAFER' example above... ;-)

旁注:

不幸的是,同樣的技巧不適用于 UIScrollView 上的 pinchGestureRecognizer 因為它不公開 min/maxNumberOfTouches 屬性.當被監控時,它總是報告 2 次觸摸(你顯然需要捏) - 所以它的內部 min/maxNumberOfTouches 似乎都設置為2 - 即使 UIScrollView 不遵守其自己的設置并繼續愉快地用任意數量的手指(超過 2 個)捏合.所以沒有辦法將捏合限制在有限數量的手指上......

Unfortunately the same trick doesn't work with the pinchGestureRecognizer on UIScrollView because it doesn't expose a min/maxNumberOfTouches property. When monitored it always reports 2 touches (which you obviously need to pinch) - so its internal min/maxNumberOfTouches seem to have been set both to 2 - even if UIScrollView isn't honoring its own settings and keeps happily pinching with any numbers of fingers (more than 2). So there is no way to restrict pinching to a limited amount of fingers...

這篇關于UIScrollView 只能用一根手指滾動的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!

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

相關文檔推薦

Stop a UITableView from automatically scrolling(阻止 UITableView 自動滾動)
iOS UIScrollView Lazy Loading(iOS UIScrollView 延遲加載)
using iOS 6.0 SDK and building for iOS 5 Target causes UIScrollView setMinimumZoomScale to fail when running on iOS 5 simulator(在 iOS 5 模擬器上運行時,使用 iOS 6.0 SDK 并為 iOS 5 Target 構建會導致 UIScrollView setMinimumZ
Create partial-screen UIPageViewController programmatically(以編程方式創建部分屏幕 UIPageViewController)
how to make an ImageView zoomable with or without ScrollView.?(如何使用或不使用 ScrollView 使 ImageView 可縮放?)
UIImageView zoom and pinch in UIScrollView(UIImageView 在 UIScrollView 中縮放和捏合)
主站蜘蛛池模板: 西安微信朋友圈广告投放_微信朋友圈推广_西安度娘网络科技有限公司 | 涂层测厚仪_漆膜仪_光学透过率仪_十大创新厂家-果欧电子科技公司 | 山东活动策划|济南活动公司|济南公关活动策划-济南锐嘉广告有限公司 | 北京康百特科技有限公司-分子蒸馏-短程分子蒸馏设备-实验室分子蒸馏设备 | 深圳标识制作公司-标识标牌厂家-深圳广告标识制作-玟璟广告-深圳市玟璟广告有限公司 | 橡胶接头|可曲挠橡胶接头|橡胶软接头安装使用教程-上海松夏官方网站 | HDPE土工膜,复合土工膜,防渗膜价格,土工膜厂家-山东新路通工程材料有限公司 | 东莞注册公司-代办营业执照-东莞公司注册代理记账-极刻财税 | 金属管浮子流量计_金属转子流量计厂家-淮安润中仪表科技有限公司 | 办公室家具公司_办公家具品牌厂家_森拉堡办公家具【官网】 | 深圳APP开发公司_软件APP定制开发/外包制作-红匣子科技 | 低压载波电能表-单相导轨式电能表-华邦电力科技股份有限公司-智能物联网综合管理平台 | 鹤壁创新仪器公司-全自动量热仪,定硫仪,煤炭测硫仪,灰熔点测定仪,快速自动测氢仪,工业分析仪,煤质化验仪器 | 楼承板-钢筋楼承板-闭口楼承板-无锡优贝斯楼承板厂 | 【直乐】河北石家庄脊柱侧弯医院_治疗椎间盘突出哪家医院好_骨科脊柱外科专业医院_治疗抽动症/关节病骨伤权威医院|排行-直乐矫形中医医院 | 大流量卧式砂磨机_强力分散机_双行星双动力混合机_同心双轴搅拌机-莱州市龙跃化工机械有限公司 | 合景一建-无尘车间设计施工_食品医药洁净车间工程装修总承包公司 | 考试试题_试卷及答案_诗词单词成语 - 优易学 | 厂房出租-厂房规划-食品技术-厂房设计-厂房装修-建筑施工-设备供应-设备求购-龙爪豆食品行业平台 | 专业的新乡振动筛厂家-振动筛品质保障-环保振动筛价格—新乡市德科筛分机械有限公司 | 领袖户外_深度旅游、摄影旅游、小团慢旅行、驴友网 | 横河变送器-横河压力变送器-EJA变送器-EJA压力变送器-「泉蕴仪表」 | 智能风向风速仪,风速告警仪,数字温湿仪,综合气象仪(气象五要素)-上海风云气象仪器有限公司 | 钢格板|镀锌钢格板|热镀锌钢格板|格栅板|钢格板|钢格栅板|热浸锌钢格板|平台钢格板|镀锌钢格栅板|热镀锌钢格栅板|平台钢格栅板|不锈钢钢格栅板 - 专业钢格板厂家 | 交流伺服电机|直流伺服|伺服驱动器|伺服电机-深圳市华科星电气有限公司 | 洗地机-全自动/手推式洗地机-扫地车厂家_扬子清洁设备 | 润东方环保空调,冷风机,厂房车间降温设备-20年深圳环保空调生产厂家 | 专业深孔加工_东莞深孔钻加工_东莞深孔钻_东莞深孔加工_模具深孔钻加工厂-东莞市超耀实业有限公司 | 书信之家_书信标准模板范文大全 最新范文网_实用的精品范文美文网 | 交变/复合盐雾试验箱-高低温冲击试验箱_安奈设备产品供应杭州/江苏南京/安徽马鞍山合肥等全国各地 | 餐饮小吃技术培训-火锅串串香培训「何小胖培训」_成都点石成金[官网] | 碳纤维布-植筋胶-灌缝胶-固特嘉加固材料公司 | 空调风机,低噪声离心式通风机,不锈钢防爆风机,前倾皮带传动风机,后倾空调风机-山东捷风风机有限公司 | 合肥办公室装修 - 合肥工装公司 - 天思装饰 | 照相馆预约系统,微信公众号摄影门店系统,影楼管理软件-盟百网络 | 高空重型升降平台_高空液压举升平台_高空作业平台_移动式升降机-河南华鹰机械设备有限公司 | 多功能干燥机,过滤洗涤干燥三合一设备-无锡市张华医药设备有限公司 | 冷藏车-东风吸污车-纯电动环卫车-污水净化车-应急特勤保障车-程力专汽厂家-程力专用汽车股份有限公司销售二十一分公司 | Jaeaiot捷易科技-英伟达AI显卡模组/GPU整机服务器供应商 | 北京网站建设公司_北京网站制作公司_北京网站设计公司-北京爱品特网站建站公司 | 网站建设-网站制作-网站设计-网站开发定制公司-网站SEO优化推广-咏熠软件 |