2014-10-06 17 views
6

Ich versuche, den Trefferbereich meines UIButton zu erhöhen. Ich habe ein neues Xcode-Projekt mit einem UIButton in der Mitte des Storyboards. Die Taste ist mit meinem View-Controller mit einer Steckdose und einer Aktion verbunden. Ich bin programmatisch in der Lage, den Knopftitel zu ändern und nur zum Spaß machte es Aktion ändern Sie den Hintergrund der Ansicht, wenn ich auf die Schaltfläche tippen. Ich weiß also, dass alles verbunden ist und funktioniert.xcode iOS erhöhen UIButton Trefferbereich

Von dem, was ich online gelesen habe, sollte dies funktionieren, aber es ist nicht.

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

Irgendwelche Gedanken? Ich habe es ohne die negativen Ränder versucht und das funktioniert auch nicht. BTW, ich habe versucht, die vielen Orte, an denen diese Frage gestellt wird, aber es funktioniert nicht. Danke für Ihre Hilfe. Auch ich habe gehört, Unterklasse UIButton könnte ein Problem zu schaffen, irgendwelche Gedanken dazu?

Update: Die UIButton, die ich machen möchte, hat eine Hintergrundfarbe und ist eine bestimmte Größe. Ich möchte diese Größe beibehalten, aber den Bereich um sie herum vergrößern, ohne das Aussehen der Schaltfläche zu verändern.

+2

Kannst du nicht einfach die Ecken klicken und ziehen von die UIButton innerhalb des Storyboards, um die Größe zu erhöhen? – user3746428

+0

@ user3746428 Das Vergrößern der Schaltflächengröße erhöht auch die Hintergrundfarbe, die ich für die Schaltfläche festgelegt habe. Ich möchte, dass der Button genau so aussieht, wie er jetzt aussieht, aber vergrößert den Trefferbereich um ihn herum. Vielen Dank für das Erwähnen, ich werde meine Frage aktualisieren. –

+0

@ JimBak können Sie einen UITapGestureRecognizer auf der UIView erstellen und feststellen, ob sich der Tap in der Nähe der Schaltfläche befindet. – WMios

Antwort

2

Um den Trefferbereich zu vergrößern, ohne die Hintergrundfarbe oder das Bild zu verzerren, ist es wahrscheinlich am einfachsten, sie zu trennen. Haben Sie eine klare UIB-Schaltfläche ohne Hintergrundfarbe über einer UIView (oder UIImage usw.), die die Visuals bereitstellt. Auf diese Weise können Sie mit dem Rahmen des UIButton alles machen, was Sie wollen, und das Aussehen wird nicht beeinträchtigt, es sei denn, Sie wenden die gleichen Transformationen auf die andere UIView an.

Warum diese Codezeile nicht funktioniert, das dritte und vierte Element in CGRectMake sind keine Ränder, sie sind Dimensionen: Sie können keine negative Höhe und Breite haben. Geben Sie die endgültige Größe ein, die Sie möchten, nicht die Änderung oder die Ränder (d. H., Wenn Sie eine Breite von 100 um 20 verkleinern möchten, geben Sie 80 ein).

+1

Danke für die Klarstellung. Ich möchte wirklich keine Schaltfläche auf ein Bild setzen und muss damit das automatische Layout verwalten. Ich kann nicht glauben, dass es einfach keinen einfachen Weg gibt, die Trefferfläche einer Schaltfläche um eine bestimmte Anzahl von Pixeln zu erhöhen ... –

2

Unterklasse UIButton und implementieren Sie die Methode backgroundRectForBounds.

Erweitern Sie den Rahmen auf die gewünschte Größe des Berührungsbereichs, und verkleinern Sie anschließend die Grenzen des Hintergrunds durch Hinzufügen von Einfügungen.

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

Mehr Infos hier: https://developer.apple.com/library/ios/documentation/uikit/reference/uibutton_class/index.html#//apple_ref/occ/instm/UIButton/backgroundRectForBounds:

+0

Ich habe das versucht, sollte das funktionieren, weil es nicht funktioniert. CGFloat-Rand = 120,0; CGRect Bereich = CGRectInset (button.bounds, -margin, -margin); [Schaltfläche backgroundRectForBounds: Bereich]; –

+0

Fügen Sie in Ihrer backgroundRectForBounds-Methode einen Haltepunkt hinzu, um festzustellen, ob er aufgerufen wird. – dfmuir

+0

Ja, es wird aufgerufen. –

5

Ich glaube, Sie wollen nur für die gleiche Taste verwenden, um die Hintergrundfarbe oder zurück Boden Bild auf den gleichen Bereich zu beschränken und die Berührungsfläche zu erhöhen?

nach meinem Wissen können Sie das in Interface Builder nicht tun. Aber durch Codierung können Sie Ebenen verwenden.

nehmen Ausgang der Taste

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]; 

ich bin nicht sicher, was Sie suchen ich diese Hilfe, die Sie hoffen, aber überprüfen Sie das Bild einmal enter image description here