2012-11-06 2 views
10

è possibile aumentare l'area tapable di UIButton senza cambiare la dimensione del di Button sfondo ImmagineCome aumentare tapable (colpire) area di (tipo personalizzato) UIButton senza aumentare le dimensioni dell'immagine di sfondo di

ho provato:

[shareButton setContentEdgeInsets:UIEdgeInsetsMake(top, left, bottom, right)]; 

&

[shareButton setImageEdgeInsets:UIEdgeInsetsMake(top, left, bottom, right)]; 

ma nessuno di questi ha funzionato.

Qualche suggerimento, per favore?

risposta

14

Effettuare l'UIButton di tipo buttonWithType:UIButtonTypeCustom e assegnare un'immagine di una dimensione inferiore.

Non impostare l'immagine come immagine di sfondo o aumenterà con il pulsante. Impostalo invece come immagine principale.

Ad esempio, se si desidera impostare l'area percussibile su un formato 64x64 e si desidera mostrare un'immagine di dimensioni 32x32: la dimensione del pulsante deve essere 64x64 e la dimensione dell'immagine deve essere 32x32.

di programmazione:

UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom]; 

// use an image with the desired size (for example 32x32) 
[button setImage: [UIImage imageNamed: @"buttonIcon.png"] forState: UIControlStateNormal]; 
// just set the frame of the button (64x64) 
[button setFrame: CGRectMake(xPositionOfMyButton, yPositionOfMyButton, 64, 64)]; 

Interface Builder:

Interface Builder example

3

sottoclasse la superview del UIButton, e override hitTest: withEvent:

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event 
{ 
    CGPoint buttonPoint = [self convertPoint:point toView:_button]; 
    if ([_button pointInside:buttonPoint withEvent:event]) { // you may add your requirement here 
     return _button; 
    } 
    return [super hitTest:point withEvent:event]; 
} 
+0

c'è alcun altro modo che sub classificare l'UIButton? qualsiasi metodo o proprietà del pulsante per impostare manualmente l'area di battuta? –

+3

@crishoj Questo è molto peggio! – devios1

+0

@crishoj non è vero, è possibile sottoclasse il pulsante e sovrascrive pointInside. – Andy

3

utilizzare l'approccio di progettazione che ti piace (Interface Builder/Video Format Language) insieme a Autolayout e il layout della UIButton con la dimensione desiderata . Imposta il titolo o l'immagine come contenuto e utilizza un'immagine trasparente con le dimensioni dell'area toccabile come immagine di sfondo.

_button = [UIButton buttonWithType:UIButtonTypeCustom]; 
[_button setImage:[UIImage imageNamed:@"contentImage"] forState:UIControlStateNormal]; 
[_button setBackgroundImage:[UIImage imageNamed:@"transparentImage"] forState:UIControlStateNormal]; 

Qui un esempio con _button.layer.borderWidth = 1.

Example http://i59.tinypic.com/wwnt5u.png