Est-il possible pour un UIButton (ou n'importe quel autre contrôle que ce soit), pour recevoir les événements tactiles lorsque le UIButton du cadre se trouve à l'extérieur de celle du parent de l'image? Parce que quand j'essaie de cela, ma UIButton ne semble pas être en mesure de recevoir tous les événements. Comment puis-je contourner cela?
Réponses
Trop de publicités?Oui. Vous pouvez remplacer l' hitTest:withEvent:
méthode de retour d'une vue pour un plus grand ensemble de points de vue que contient. Voir la Classe UIView de Référence.
Edit: Exemple:
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
{
CGFloat radius = 100.0;
CGRect frame = CGRectMake(-radius, -radius,
self.frame.size.width + radius,
self.frame.size.height + radius);
if (CGRectContainsPoint(frame, point)) {
return self;
}
return nil;
}
Edit 2: (Après clarification:) afin de s'assurer que le bouton est considérée comme étant à l'intérieur de la mère de limites, vous avez besoin de redéfinir pointInside:withEvent:
dans le parent d'inclure le bouton de l'image.
- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event
{
if (CGRectContainsPoint(self.view.bounds, point) ||
CGRectContainsPoint(button.view.frame, point))
{
return YES;
}
return NO;
}
Remarque le code juste là pour remplacer pointInside n'est pas tout à fait correct. Comme Invoquer explique ci-dessous, faites ceci:
-(BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event
{
if ( CGRectContainsPoint(self.oversizeButton.frame, point) )
return YES;
return [super pointInside:point withEvent:event];
}
Notez que vous auriez très probablement le faire avec self.oversizeButton
comme un IBOutlet dans la présente sous-classe UIView; ensuite, vous pouvez simplement faire glisser les "oversize bouton" en question, à la vue en question. (Ou, si pour quelque raison que vous faisiez beaucoup dans un projet, vous auriez un spécial UIButton sous-classe, et vous pouvez regarder à travers votre sous-vue de liste pour ces classes.) Espérons que cela aide.
@jnic, je suis en train de travailler sur SDK iOS 5.0 et afin d'obtenir votre code de travail de droit que j'avais à faire ceci:
- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event {
if (CGRectContainsPoint(button.frame, point)) {
return YES;
}
return [super pointInside:point withEvent:event]; }
Le conteneur de vue dans mon cas, c'est un UIButton et tous les éléments enfants sont également UIButtons qui peuvent se déplacer à l'extérieur des limites de la mère UIButton.
Meilleur