UIScrollView delaysContentTouches

1752 ワード

半年不動のコード製品は問題があると言っています.UIsliderのスライドが鈍いので、指を先に触って、押してからスライドすることができます.シーンはUISliderUITableViewCellに追加された.
プロジェクトではUISliderを継承しているので、簡単な解決策ですが、プロジェクトでは、UIsliderを新たに生成し、何も処理しないUIViewに置きます.効果を見る.結果はスムーズでした.だから問題はUITableViewまたはUITableViewCellにあるに違いない.
UItableViewおよびUIscrollViewのドキュメントを表示します.
@property(nonatomic) BOOL delaysContentTouches;       // default is YES. if NO, we immediately call -touchesShouldBegin:withEvent:inContentView:. this has no effect on presses


delaysContentTouchesプロパティが見つかりました.デフォルトはYESで、NOに設定すると、touchesShouldBeginメソッドにすぐに応答します.の
ソリューション
_tableView.delaysContentTouches = NO;
        [_tableView.subviews enumerateObjectsUsingBlock:^(__kindof UIView * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
            if ([obj isKindOfClass:[UIScrollView class]]) {
                UIScrollView *_s = (UIScrollView *)obj;
                _s.delaysContentTouches = NO;
            }
        }];


tableviewのすべてのdelaysContentTouchesメソッドを閉じます.
その後、iOS 7ではまだ感度が悪いとテストされました.ふんふん?iOS 7 UITableViewCellのscrollViewもオンになっているので、cellを作成するときも、同じ手段で、
- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
    if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {
        [self setup];
        ///#FIX iOS7      
        for (UIView *view in self.subviews) {
            if([view isKindOfClass:[UIScrollView class]]) {
                ((UIScrollView *)view).delaysContentTouches = NO;
                break;
            }
        }
    }
    return self;
}


OK万事順調...