Sunulan cevaplarda yanlış bir şey yok; Ancak jlarjlar'ın cevabını , diğer kontrollerle (örneğin SearchBar) aynı soruna değer katabilecek inanılmaz bir potansiyele sahip olarak genişletmek istedim . Bunun nedeni, pointInside bir UIView'a bağlı olduğu için, dokunma alanını geliştirmek için herhangi bir kontrolü alt sınıflandırabilmesidir . Bu cevap aynı zamanda komple çözümün nasıl uygulanacağının tam bir örneğini gösterir.
Düğmeniz (veya herhangi bir denetiminiz) için yeni bir alt sınıf oluşturun
#import <UIKit/UIKit.h>
@interface MNGButton : UIButton
@end
Ardından, alt sınıf uygulamanızdaki pointInside yöntemini geçersiz kılın
@implementation MNGButton
-(BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event
{
//increase touch area for control in all directions by 20
CGFloat margin = 20.0;
CGRect area = CGRectInset(self.bounds, -margin, -margin);
return CGRectContainsPoint(area, point);
}
@end
Film şeridi / xib dosyanızda söz konusu kontrolü seçin ve kimlik denetçisini açın ve özel sınıfınızın adını yazın.
Düğmeyi içeren sahne için UIViewController sınıfınızda, düğmenin sınıf türünü alt sınıfınızın adıyla değiştirin.
@property (weak, nonatomic) IBOutlet MNGButton *helpButton;
Film şeridi / xib düğmenizi IBOutlet özelliğine bağlayın; dokunma alanınız alt sınıfta tanımlanan alana uyacak şekilde genişletilir.
PointInside yöntemini CGRectInset ve CGRectContainsPoint yöntemleriyle birlikte geçersiz kılmanın yanı sıra , herhangi bir UIView alt sınıfının dikdörtgen dokunma alanını genişletmek için CGGeometry'nin incelenmesi zaman almalıdır . Ayrıca at CGGeometry kullanım senaryoları üzerinde bazı güzel ipuçları bulabilirsiniz NSHipster .
Örneğin, yukarıda belirtilen yöntemleri kullanarak dokunma alanını düzensiz hale getirebilir veya genişlik dokunma alanını yatay dokunma alanının iki katı kadar büyük yapmayı seçebiliriz:
CGRect area = CGRectInset(self.bounds, -(2*margin), -margin);
Not: Herhangi bir UI Sınıf kontrolünün değiştirilmesi, farklı kontroller (veya UIImageView, vb. Gibi herhangi bir UIView alt sınıfı) için dokunmatik alanın genişletilmesinde benzer sonuçlar üretmelidir.