2014-10-06 19 views
6

Próbuję zwiększyć obszar uderzenia mojego Uibutton. Mam nowy projekt Xcode z UIButton w środku storyboard. Przycisk jest podłączony do kontrolera widoku z gniazdem i działaniem. Mogę programowo zmienić tytuł przycisku i po prostu dla zabawy, jego akcja zmienia tło widoku po dotknięciu przycisku. Wiem więc, że wszystko jest połączone i działa.xcode iOS zwiększ obszar uderzenia UIButton

Z tego, co przeczytałem online, powinno to zadziałać, ale tak nie jest.

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

Jakieś myśli? Próbowałem bez ujemnych marginesów i to też nie działa. BTW, próbowałem wielu miejsc, o które pytano, ale to nie działa. Dziękuję za pomoc. Ponadto słyszałem, że podklasowanie UIButton mogło stworzyć problem, jakieś przemyślenia na ten temat?

Aktualizacja: Uibutton Chcę utworzyć ma kolor tła i jest to określony rozmiar. Chcę zachować ten sam rozmiar, ale zwiększyć obszar uderzenia wokół niego bez zniekształcania wyglądu przycisku.

+2

nie można po prostu kliknij i przeciągnij narożniki UIButton w serii ujęć w celu zwiększenia rozmiaru? – user3746428

+0

@ user3746428 Zwiększenie rozmiaru przycisku powoduje również zwiększenie koloru tła ustawionego dla przycisku. Chcę, aby przycisk wyglądał dokładnie tak samo jak teraz, ale zwiększ obszar uderzenia wokół niego. Dziękuję, że o tym wspomniałem, zaktualizuję moje pytanie. –

+0

@JimBak można utworzyć UITapGestureRecognizer na UIView i określić, czy kran jest blisko przycisku. – WMios

Odpowiedz

2

Aby zwiększyć obszar uderzenia bez zniekształcania koloru tła lub obrazu, najprawdopodobniej najłatwiej byłoby je oddzielić. Mają jasne UIButton, bez koloru tła, powyżej UIView (lub UIImage, itp.), Który zapewnia wizualizacje. W ten sposób możesz zrobić, co chcesz, do ramki UIButton i nie wpłynie to na efekty wizualne, chyba że zastosujesz te same transformacje do innych UIView.

Co do tego, dlaczego ta linia kodu nie działa, trzeci i czwarty element w CGRectMake nie są marginesami, to wymiary: nie można mieć ujemnej wysokości i szerokości. Wprowadź ostateczny rozmiar, który chcesz, a nie zmianę lub marginesy (tj. Jeśli chcesz zmniejszyć szerokość o 100, wpis 80).

+1

Dziękuję za wyjaśnienia. Naprawdę nie chcę umieszczać przycisku na obrazie i muszę nim zarządzać automatycznym układem. Nie mogę uwierzyć, że nie ma prostego sposobu na proste zwiększenie obszaru uderzenia przycisku o pewną liczbę pikseli ... –

2

Podklasa UIButton i zaimplementuj metodę backgroundRectForBounds.

Rozwiń ramkę do wymaganego rozmiaru obszaru dotykowego, a następnie zmniejsz granice tła, dodając wypustki.

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

Więcej informacji tutaj: https://developer.apple.com/library/ios/documentation/uikit/reference/uibutton_class/index.html#//apple_ref/occ/instm/UIButton/backgroundRectForBounds:

+0

Próbowałem tego, czy to działa, ponieważ tak nie jest. Margines CGFloat = 120.0; CGRect area = CGRectInset (button.bounds, -margin, -margin); [przycisk backgroundRectForBounds: area]; –

+0

Dodaj punkt przerwania w swojej metodzie backgroundRectForBounds, aby sprawdzić, czy jest wywoływany. – dfmuir

+0

Tak, to się nazywa. –

5

myślę po prostu chcesz używać tego samego przycisku do ograniczania koloru tła lub tlo obrazu na tym samym obszarze i zwiększyć obszar dotykowy?

według mojej wiedzy nie można tego zrobić w programie budującym interfejs. Ale poprzez kodowanie można za pomocą warstw.

odbioru wylot przycisku

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

nie jestem pewien, co szukasz mam nadzieję, że to pomóc, ale sprawdzić obraz raz enter image description here

Powiązane problemy