2016-08-01 17 views
9

Tworzę niestandardową klawiaturę i potrzebuję wyśrodkować obraz ikony zmiany wewnątrz przycisku zmiany. Obraz ma rozmiar 100 x 100 pikseli.Jak wyśrodkować obraz wewnątrz Uibuttonu bez rozciągania w obie strony w Swift?

Jednak ramka przycisku w pozycji pionowej to 36pt x 38pt, a w orientacji poziomej to 68pt x 32pt. Próbowałem użyć właściwości wstawienia obrazu przycisku, aby wyśrodkować obraz. Jednak tego nie robi.

Próbowałem siebie i ustaw krawędzie krawędzi obrazu na (25,25,25,25), a centra zdjęć w obu rozmiarach. Jednak ikona staje się zbyt mała, aby ją zobaczyć.

shiftButton.setImage(UIImage(named: "shift"), forState: .Normal) 

shiftButton.imageEdgeInsets = UIEdgeInsetsMake(0,0,0,0) 

Programuję przycisk. I potrzebuję przycisku do skalowania z zachowaniem jego współczynnika kształtu, tj. 1:1. Jego maksymalna szerokość lub wysokość jest zawsze związana z wysokością samego guzika. Szerokość/wysokość obrazu powinna być maksymalna wysokości przycisku. I nie powinno się w żaden sposób rozciągać, aby zniekształcić ikonę. Jednak sam przycisk może się rozciągać.

Potrzebuję obrazu do skalowania zgodnie z ramką przycisku, ale zachowaj proporcje. Może też zmniejszać skalę lub skalę, ale zawsze powinien utrzymywać współczynnik proporcji 1: 1.

Wszelkie sugestie dotyczące rozwiązania tego problemu?

Odpowiedz

9

Wreszcie rozwiązanie wyszła. Musisz ustawić tryb zawartości dla obrazu wewnątrz Uibutton.

Rozwiązaniem jest aktualizacja contentMode o Image gdy używasz pierwszoplanowy wizerunek wewnątrz przycisku wraz z contentMode z UIButton.

shiftButton.contentMode = .Center 
shiftButton.imageView?.contentMode = .ScaleAspectFit 
+0

.center i .scaleAspectFit dla najnowszej wersji Swift (teraz przy użyciu metody lowerCameCase) –

3

Ustaw tryb Zawartość przycisku do Center:

shiftButton.contentMode = .Center 
+0

Ja już próbowałem. Wydaje się, że nie działa to w tym konkretnym przypadku. Może, ponieważ obraz jest większy niż rozmiar ramki. – Ariel

+0

Gdy szerokość przycisku zaczyna się rozciągać, obraz również się rozciąga. I to zachowanie wcale nie jest pożądane. – Ariel

+0

Czy próbowałeś '.ScaleAspectFit'? –

0

udało mi się wyśrodkować obraz poprzez ustawienie wypustki treści na 0 za pomocą Inspektora rozmiarze w serii ujęć:

enter image description here

0
  • Dodaj User Defined Runtime Atrybuty do przycisku.

Na zrzucie ekranu poniżej wartości 1 jest równa scaleAspectFit

imageView.ContentMode = scaleAspectFit 

enter image description here enter image description here

Powiązane problemy