سؤال

أنا أحاول تنفيذ إيسكرولفيو حيث أفقيا بالغسل مخطوطات من خلال الصور في سكرولفيو ولكن عموديا بالغسل ينفذ إجراء آخر لدي.الآن لدي إيسكرولفيو التي يتم ترقيمها مع التمرير الرأسي تعطيل الذي يعمل على ما يرام للتمرير من خلال الصور ، ولكن أنا ذاهب مجنون في محاولة لايجاد وسيلة لاعتراض المقالي العمودية واستدعاء طريقة بلدي بدلا من المقالي العمودية مجرد أن تؤكل من قبل سكرولفيو.كنت قادرا على القيام به

    UIPanGestureRecognizer *panUp = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePanGesture:)];
[self.scrollView addGestureRecognizer:panUp];
[scrollView.panGestureRecognizer setEnabled:NO];

الذي يعطيني السيطرة الكاملة على بالغسل في مقبض بلدي:الطريقة ، ولكن هذا ليس مفيدا بشكل خاص لأنني أشعر أنني سأعيد كتابة كل منطق التمرير الذي أحاول تجنبه.أي مساعدة أو توجيه حول كيفية تحقيق ذلك سيكون موضع تقدير كبير.

شكراً!

هل كانت مفيدة؟

المحلول

أعتقد أن هذا سيكون من الصعب إذا كنت ترغب في استخدام إيماءة عموم بسبب استخدام عرض التمرير لهذه الإيماءات.ومع ذلك، إذا كان بإمكانك استخدام انتقاد، فمن السهل التنفيذ.

giveacodicetagpre.

قد اختبرت هذا، وقد عملت على ما يرام للاتصال بالمعالج، ولا تحتاج إلى تعطيل التعرف على إيماءة براءة عرض التمرير (في اختباري، وكان عرض التمرير طويل القامة بما فيه الكفاية والمحتوى قصير بما فيه الكفاية أنه لم يكن هناكالتمرير العمودي - لا أعرف إذا كان هذا ضروريا أم لا).

نصائح أخرى

اعتبارا من دائرة الرقابة الداخلية 5, UIScrollView يعرض لها UIPanGestureRecognizer.تعيين انتقاد المخصصة الخاصة بك delegate إلى self وجعل جيستوريكوغنيزر خاصية أو إيفار ، وجعل صفك تتفق مع <UIGestureRecognizerDelegate> البروتوكول.ثم ، تنفيذ UIGestureRecognizerDelegateفي – gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer: مثل ذلك:

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
{
    if ([gestureRecognizer isEqual:self.swipe] && [otherGestureRecognizer isEqual:self.scrollView.panGestureRecognizer])
    {
         return NO;
    }
    return YES; // the default for this method
}

أضفت UIPanGestureRecognizer ثم الإعدادgestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer: مثل هذا:

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
    if ([gestureRecognizer isEqual:self.panGesture] && [otherGestureRecognizer isEqual:self.collectionView.panGestureRecognizer]){
        return YES;
    }
    return NO;
}

لقد أضفت أيضا تسجيل وصول gestureRecognizerShouldBegin:

- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer {
    if ([gestureRecognizer isEqual:self.panGesture]) {
        if (gestureRecognizer.numberOfTouches > 0) {
            CGPoint point = [gestureRecognizer locationOfTouch:0 inView:gestureRecognizer.view];
            CGFloat distX = abs(self.collectionView.lastTouchPos.x - point.x);
            CGFloat distY = abs(self.collectionView.lastTouchPos.y - point.y);
            if (distX > distY) {
                return NO;
            }
        } else {
            return NO;
        }
    }
    return YES;
}

لاستخدام فقط self.panGesture عند التحريك لأعلى أو لأسفل.

تحديث

https://stackoverflow.com/a/8603839/667834 يبدو أن لديها طريقة أفضل ل gestureRecognizerShouldBegin

- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer {
    if ([gestureRecognizer isEqual:self.panGesture]) {
        if (gestureRecognizer.numberOfTouches > 0) {
            CGPoint translation = [self.panGesture velocityInView:self.collectionView];
            return fabs(translation.y) > fabs(translation.x);
        } else {
            return NO;
        }
    }
    return YES;
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top