2014-10-06 8 views
6

Sto tentando di aumentare l'area di impatto del mio UIButton. Ho un nuovo progetto Xcode con un UIButton al centro dello storyboard. Il pulsante è collegato al mio controller di visualizzazione con una presa e un'azione. Sono programmaticamente in grado di modificare il titolo del pulsante e solo per divertimento, è l'azione cambiare lo sfondo della vista quando tocco il pulsante. Quindi so che tutto è connesso e funziona.xcode iOS aumenta l'area colpisci UIButton

Da quello che ho letto online, questo dovrebbe funzionare ma non lo è.

[pulsante setFrame: CGRectMake (button.frame.origin.x, button.frame.origin.y, -64, -64)];

Qualche idea? Ho provato senza margini negativi e anche questo non funziona. A proposito, ho provato i molti posti a cui viene posta questa domanda ma non funziona. Grazie per l'aiuto. Inoltre, ho sentito sottoclasse UIButton potrebbe creare un problema, qualche idea al riguardo?

Aggiornamento: L'UIButton che voglio fare ha un colore di sfondo ed è una dimensione specifica. Voglio mantenere la stessa dimensione, ma aumentare l'area d'impatto intorno senza distorcere l'aspetto del pulsante.

+2

Non puoi semplicemente fare clic e trascinare gli angoli di l'UIButton all'interno dello storyboard per aumentare le dimensioni? – user3746428

+0

@ user3746428 L'aumento delle dimensioni del pulsante aumenta anche il colore di sfondo che ho impostato per il pulsante. Voglio mantenere il pulsante con lo stesso identico aspetto di adesso, ma aumentare l'area d'impatto attorno ad esso. Grazie per aver menzionato questo, aggiornerò la mia domanda. –

+0

@JimBak è possibile creare un UITapGestureRecognizer su UIView e determinare se il tocco è vicino al pulsante. – WMios

risposta

2

Per aumentare l'area di impatto senza distorcere il colore di sfondo o l'immagine, sarebbe probabilmente più semplice separarli. Avere un chiaro UIButton, senza colore di sfondo, sopra un UIView (o UIImage, ecc.) Che fornisce le immagini. In questo modo, puoi fare tutto ciò che vuoi sul frame di UIButton e non influenzerà la grafica a meno che non applichi le stesse trasformazioni all'altra UIView.

Per quanto riguarda il motivo per cui quella riga di codice non funziona, il terzo e il quarto elemento in CGRectMake non sono margini, sono dimensioni: non è possibile avere un'altezza e una larghezza negative. Inserisci la dimensione massima che vuoi che sia, non la modifica oi margini, (ad esempio se desideri ridurre una larghezza di 100 per 20, inserisci 80).

+1

Grazie per il chiarimento. Non voglio davvero mettere un pulsante sopra un'immagine e devo gestire il layout automatico con quello. Non posso credere che non ci sia un modo semplice per aumentare semplicemente l'area di un pulsante di un certo numero di pixel ... –

2

Sottoclasse UIButton e implementare il metodo backgroundRectForBounds.

Espandere il riquadro fino alla dimensione dell'area sensibile desiderata, quindi ridurre i limiti dello sfondo aggiungendo riquadri.

- (CGRect)backgroundRectForBounds:(CGRect)bounds { 
    return CGRectInset(bounds, -50, -50); 
} 

Maggiori informazioni qui: https://developer.apple.com/library/ios/documentation/uikit/reference/uibutton_class/index.html#//apple_ref/occ/instm/UIButton/backgroundRectForBounds:

+0

Ho provato questo, dovrebbe funzionare perché non lo è. margine CGFloat = 120,0; Area CGRect = CGRectInset (button.bounds, -margin, -margin); [pulsante backgroundRectForBounds: area]; –

+0

Aggiungere un punto di interruzione nel metodo backgroundRectForBounds per vedere se viene chiamato. – dfmuir

+0

Sì, viene chiamato. –

5

penso che si desidera utilizzare lo stesso tasto per limitare il colore di sfondo o l'immagine di terra di nuovo alla stessa zona e aumentare l'area di contatto?

come da mia conoscenza non è possibile farlo nel generatore di interfacce. Ma attraverso la codifica puoi usare i livelli.

prendere uscita del tasto

CALayer *buttonlayer=[CALayer layer]; 

    buttonlayer.frame=CGRectMake(50 , 50, 50, 50); // set the frame where you want to see the background color or background image to be visible in your button 

    buttonlayer.backgroundColor=[[UIColor colorWithPatternImage:[UIImage imageNamed:@"yourimage.png"] ] CGColor]; // if u want image (but remember the image size must same as your layer frame it may look bad if the image bounds does not mach your layer bounds, because you are setting color not image) 


    // to set color (donot use if you want image, use colorWithPatternImage to set image color) 
    buttonlayer.backgroundColor=[[UIColor graycolor] CGColor]; // if you want only color 

    // you can add round rects to the button layer 

    buttonlayer.cornerRadius=2.5f; 

    [yourbutton.layer addSublayer:buttonlayer]; 

Non sono sicuro di quello che stai cercando per Spero che questo aiuto voi, ma controllare l'immagine una volta enter image description here