Saya mencoba pendekatan yang sedikit berbeda untuk mencegah objek UIWebView bergulir dan memantul: menambahkan pengenal isyarat untuk mengesampingkan gerakan lain.
Tampaknya, UIWebView atau sub -scroller-nya menggunakan pengenal gerakan pan sendiri untuk mendeteksi pengguliran pengguna. Tetapi menurut dokumentasi Apple ada cara yang sah untuk mengganti satu pengenal isyarat dengan yang lain. Protokol UIGestureRecognizerDelegate memiliki metode gestureRecognizer: seharusnyaRecognizeSecara bersamaanWithGestureRecognizer: - yang memungkinkan untuk mengontrol perilaku setiap pengenal gesture yang bertabrakan.
Jadi, yang saya lakukan adalah
dalam metode viewDidLoad view controller:
// 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];
lalu, metode override gesture:
// 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;
}
Tentu saja, metode delegasi ini dapat membuat saya lebih kompleks dalam aplikasi nyata - kita dapat menonaktifkan pengenal lain secara selektif, menganalisis otherGestureRecognizer.view dan membuat keputusan berdasarkan tampilan apa itu.
Dan, akhirnya, demi kelengkapan, metode yang kami daftarkan sebagai pan handler:
- (void)handlePanFrom:(UIPanGestureRecognizer *)recognizer
{
// do nothing as of yet
}
itu bisa kosong jika semua yang kita inginkan adalah membatalkan pengguliran dan pemantulan tampilan web, atau itu bisa berisi kode kita sendiri untuk mengimplementasikan jenis gerakan panci dan animasi yang benar-benar kita inginkan ...
Sejauh ini saya hanya bereksperimen dengan semua hal ini, dan tampaknya berfungsi kurang lebih seperti yang saya inginkan. Saya belum mencoba mengirimkan aplikasi apa pun ke iStore. Tapi saya yakin saya belum menggunakan apa pun yang tidak terdokumentasi sejauh ini ... Jika ada yang menemukan sebaliknya, mohon informasikan kepada saya.