Oto? Ramka jest nieco większa niż rozmiar obrazu, a ja po prostu chcę, aby obraz był wyśrodkowany.Gdy tryb zawartości UIButton jest „centrum”, obraz w tle jak ja ustawienie obrazu tła i tryb zawartość jest piksele
Odpowiedz
Domyślam się, że obraz tła nie jest uważany za "treść" przez Uibutton, więc tryb zawartości nie miał zastosowania do obrazu tła. Zamiast ustawić obraz przycisku i to działało w porządku:
[btn setImage:[[UIImage alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"dots_game_horiz_blue" ofType:@"png"]] forState:UIControlStateNormal];
[btn setContentMode:UIViewContentModeCenter];
Problem z tym rozwiązaniem polega na tym, że UIButton ma wewnętrzny margines, więc jeśli obraz nie jest wystarczająco mały, zostanie przycięty, nawet jeśli powinien się zmieścić wewnątrz przycisku. –
Ustawienie trybu zawartości w rzeczywistości nic tutaj nie robi.Obrazy przycisków są automatycznie wycentrowane i nie są skalowane. Spróbuj ustawić wszystko, ale nie wyśrodkuj i zobacz, co mam na myśli. –
+1 Jednak niestety, jeśli chcesz mieć tekst, a także obraz, to nie będzie działać :-( – Marc
Można również wdrożyć - (CGRect)backgroundRectForBounds:(CGRect)bounds
kontrolować jak tło jest narysowany.
To zadziałało dla mnie. Tworzę niestandardową klasę UIButton, a ja użyłem tego kodu do wyśrodkowania obrazu: '- (CGRect) backgroundRectForBounds (CGRect) granice { \t UIImage * bkgImage = [siebie backgroundImageForState: self.state]; \t if (bkgImage) { \t \t CGFloat x = floorf ((self.bounds.size.width-bkgImage.size. szerokość)/2); \t \t CGFloat y = floorf ((self.bounds.size.height-bkgImage.size.height)/2); \t \t return CGRectMake (x, y, bkgImage.size.width, bkgImage.size.height); \t} \t else return [super backgroundRectForBounds: bounds]; } ' –
Rozwiązanie" Overkill "imo. Możesz po prostu ustawić ramkę dla przycisku, taką jak: UIImage * img = [UIImage imageNamed: @ "dots_game_horiz_blue.png"]; [btn setBackgroundImage: img forState: UIControlStateNormal]; btn.frame = CGRectMake (0, 0, img.size.width, img.size.height); – Tony
Potrzebowałem utworzyć zaokrąglone guziki do zdjęć awatara i znalazłem odpowiedzi na to pytanie, ale nie dotarły one do mnie. Wdrożyłem metodę backgroundRectForBounds
i skalowałem obraz, aby pasował i działa dobrze.
Mam kod na GitHub.
https://github.com/brennanMKE/CircleButton
Sposób jest również poniżej. Ważne jest, aby ustawić obraz tła, a nie obraz przycisku, który nie działa z tą metodą.
- (CGRect)backgroundRectForBounds:(CGRect)bounds {
UIImage *backgroundImage = [self backgroundImageForState:self.state];
if (backgroundImage) {
CGFloat maxWidth = CGRectGetWidth(self.frame);
CGFloat xDelta = maxWidth/backgroundImage.size.width;
CGFloat yDelta = maxWidth/backgroundImage.size.height;
CGFloat delta = xDelta > yDelta ? xDelta : yDelta;
CGFloat x = floorf((self.bounds.size.width - (backgroundImage.size.width * delta))/2);
CGFloat y = floorf((self.bounds.size.height - (backgroundImage.size.height * delta))/2);
return CGRectMake(x, y, backgroundImage.size.width * delta, backgroundImage.size.height * delta);
}
else {
return [super backgroundRectForBounds:bounds];
}
}
Prawidłowym rozwiązaniem jest zmiana typu z System na Niestandardowy. Następnie obraz tła honoruje typ zawartości zamiast tylko centrowania. W moim przypadku ustawiłem go na Aspect Fill i stosuję promień naroża 45 stopni, aby go zaokrąglić. Prosty i działa idealnie.
To nie działa. Stworzyłem nowy niestandardowy przycisk i ustawiłem jego tryb zawartości na Środek, ale nadal wypełnia obraz tła do rozmiaru widoku. – devios1
W swojej XIB/ujęć, w Inspektorze Atrybuty, trzeba:
- Ustaw typ
UIButton
doCustom
- Ustaw swój obraz w nieruchomości
Image
, nieBackground
- Members krok 2 , widać ramkę przycisku zmienioną zgodnie z ustawionym obrazem. Ustaw kadr, jak chcesz go mieć, obraz będzie się zmieniać rozmiar, aby zmieścić się
- Select
Image
dla właściwościEdge
w celu zastosowania wstawka na przycisk obrazu - wprowadzić wartości wkładce potrzebujesz. Jeśli zestaw 5 do
Top, Bottom, Left, Right
, obraz zostanie wyśrodkowany wewnątrz przycisku, z obramowaniem 5
Widać zmiany w XI b/widoku serii ujęć, nie ma potrzeby, aby uruchomić do debugowania.
Wskazówka: blat jest taka sama dla wszystkich obrazów przycisku (State Config
)
Wszystko, co zaczyna się od 'W twoim xib/storyboard', nie jest rozwiązaniem dla tego pytania: D – Magoo
Do tej pory rozwiązanie ewoluowało. Możesz pominąć krok 4 i przejść do kroku 5 przez inspektora rozmiarów (ikona reguły). –
- 1. Tryb tła w tle iOS
- 2. Jak wykrywać tryb incognito z rozszerzenia tła
- 3. Tryb Tuareg i tryb Caml
- 4. Tryb emacs Erlanga - ustawienie outdir
- 5. TabLayout Android Support Design: Centrum Gravity i tryb Przewijany
- 6. Aktualizacje akceleratora Coremotion w tle/tryb uśpienia
- 7. Obraz tła w tle HTML5
- 8. Jak określić poprawną wersję przeglądarki, gdy włączony jest tryb zgodności
- 9. jaki tryb uśpienia jest używany?
- 10. Szyny 2.3.3 - Ustawienie na tryb produkcji
- 11. android studio otwarte tryb debugowania, gdy aplikacja jest uruchomiona
- 12. UIButton jest ciemny, gdy jest wybrany (chcę tego uniknąć)
- 13. Zestaw SDK dla iPhone'a: tryb przechwytywania obrazu
- 14. Jaka jest różnica między Ja i Ja?
- 15. iPhone UITable Wyświetl obraz tła, gdy tabela jest pusta
- 16. Ustawienie UIButton titleEdgeInsets i imageEdgeInsets jest wolne z Autolayout
- 17. co to jest "tryb ścisły" i jak się go używa?
- 18. Czy jest tryb Emacs dla Rscript?
- 19. Div, Obraz tła i mapa obrazu
- 20. DB2 - czym jest tryb NF (Nowa Funkcjonalność)?
- 21. Programowanie Androida Obraz tła w tle
- 22. LaTeX, tyldy i tryb dosłowności
- 23. Ustawienie obrazu BufferedImage na kolor w Javie
- 24. Co to jest tryb główny uWSGI?
- 25. Firefox obraz w tle pozioma centrowanie dziwności
- 26. jaki jest tryb: shim faktycznie robi?
- 27. Wyśrodkuj obraz w tle przycisku wprowadzania
- 28. Zrozumienie "ja" i ustawienie siebie jako super
- 29. Tryb warunkowy w JSF
- 30. pozycjonowanie obrazu macierzy w centrum obrazu
Niestety, przeciągnąć się, że z głębi czasu, ale jest tam wyciek pamięci, jeśli się nie mylę. Brak zwolnienia dla alokacji. –
@Joseph, dzięki za wskazanie tego. Zaktualizowałem kod. –