UIWebView nesnelerinin kaydırılmasını ve sıçramasını önlemek için biraz farklı bir yaklaşım denedim : diğer hareketleri geçersiz kılmak için bir jest tanıyıcı ekleyerek.
Görünüşe göre, UIWebView veya onun kaydırma alt görünümü, kullanıcı kaydırmasını algılamak için kendi pan hareketi tanıyıcıyı kullanıyor. Ancak Apple'ın belgelerine göre, bir jest tanıyıcıyı diğeriyle geçersiz kılmanın meşru bir yolu var. UIGestureRecognizerDelegate protokolü bir yöntemi vardır gestureRecognizer: shouldRecognizeSimultaneouslyWithGestureRecognizer: - bir çarpışan hareket tanıyıcıları davranışını kontrol etmek için olanak sağlayan.
Yani, yaptığım şey
görünüm denetleyicisinin viewDidLoad yönteminde:
// Install a pan gesture recognizer // We ignore all the touches except the first and try to prevent other pan gestures
// by registering this object as the recognizer's delegate
UIPanGestureRecognizer *recognizer;
recognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePanFrom:)];
recognizer.delegate = self;
recognizer.maximumNumberOfTouches = 1;
[self.view addGestureRecognizer:recognizer];
self.panGestureFixer = recognizer;
[recognizer release];
ardından, jest geçersiz kılma yöntemi:
// Control gestures precedence
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer
shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
{
// Prevent all panning gestures (which do nothing but scroll webViews, something we want to disable in
// the most painless way)
if ([otherGestureRecognizer isKindOfClass:[UIPanGestureRecognizer class]])
{
// Just disable every other pan gesture recognizer right away
otherGestureRecognizer.enabled = FALSE;
}
return NO;
}
Tabii ki, bu temsilci yöntemi gerçek bir uygulamada beni daha karmaşık hale getirebilir - diğer tanıyıcıları seçici olarak devre dışı bırakabilir, otherGestureRecognizer.view öğesini analiz edebilir ve görünümüne göre karar verebiliriz .
Ve son olarak, bütünlük adına, pan işleyicisi olarak kaydettiğimiz yöntem:
- (void)handlePanFrom:(UIPanGestureRecognizer *)recognizer
{
// do nothing as of yet
}
İstediğimiz tek şey web görünümlerinin kaydırma ve sıçramasını iptal etmekse boş olabilir veya gerçekten istediğimiz pan hareketlerini ve animasyonlarını uygulamak için kendi kodumuzu içerebilir ...
Şimdiye kadar sadece tüm bu şeyleri deniyorum ve istediğim kadar az ya da çok çalışıyor gibi görünüyor. Yine de iStore'a herhangi bir uygulama göndermeyi denemedim. Ama şimdiye kadar belgelenmemiş hiçbir şey kullanmadığımı düşünüyorum ... Eğer başka türlü bulursa, lütfen beni bilgilendirin.