Jak możemy sprawić, by te obrazy były zaokrąglone?
Umair Afzal,
Dlaczego nie możemy po prostu wrócić image? Po co to robić? self.init(cgImage: cgImage)
Andrey Gagan
@AndreyGagan AFAIK, nie możesz "zastąpić" self nowo utworzonym UIImagew konstruktorze, ale UIImage.init(cgImage: )zamiast tego możesz połączyć się za pomocą konstruktora.
Alnitak
2
Obraz nie jest tworzony w odpowiedniej skali. Np. Jeśli rozmiar wynosi 1x1, obraz 2x2 jest zwracany, gdy skala głównego ekranu wynosi 2,0. Powinieneś zadzwonićself.init(cgImage: cgImage, scale: image!.scale, orientation: image!.imageOrientation)
Marián Černý
92
Oto inna opcja. Myślę, że chciałeś mieć dokładny obiekt UIImage.
To prawdopodobnie osiąga taki efekt, że PO chciała, ale to nic nie warte, że mieli metodę, aby utworzyć UIImage, nie ustawić UIImageView.
ttarik
Twoja druga metoda nadal tworzy widok obrazu, a nie obraz, na co zwracał uwagę @ ev0lution.
rdelmar
edycja 3 załączona. Teraz mamy kilka sposobów. Ostatni z UIImageView.
Steve Rosenberg
1
Metoda getImageWithColor(color: UIColor, size: CGSize) -> UIImagejest wystarczająca jako odpowiedź, ponieważ myślę, że nie wszyscy będą używać tego razem z UIImageView
Henry Pham
Jak możemy sprawić, by te obrazy były zaokrąglone?
Umair Afzal,
9
Drobne poprawki do doskonałej odpowiedzi @ neoneye, dzięki którym kod wywołujący nie musi tworzyć CGSize i zmienił nazwę, aby nie kolidowała z wieloma innymi:
Myślę, że niektóre odpowiedzi są trochę mylące. W większości przypadków będziesz musiał określić rozmiar obrazu, a nie konkretny przypadek (np. 1x1). Ale to miłe podejście.
Henry Pham
4
Wersja Swift 3 @anthonyliao Zaakceptowana odpowiedź:
UIImage
nie ma-initWithSize:andColor:
metody, aleNSImage
działa w systemie OS X. Czy używasz do tego niestandardowej biblioteki lub kategorii?Odpowiedzi:
Innym fajnym rozwiązaniem, kompatybilnym ze Swift 2.2 , jest utworzenie kolejnego konstruktora w UIImage w ten sposób:
W ten sposób możesz stworzyć niestandardowy kolorowy obraz w następujący sposób:
Lub opcjonalnie utwórz obraz o niestandardowym rozmiarze:
Swift 3.0
źródło
UIGraphicsBeginImageContextWithOptions(rect.size, true, 1.0)
ref: developer.apple.com/library/ios/documentation/UIKit/Reference/ ...image
? Po co to robić?self.init(cgImage: cgImage)
UIImage
w konstruktorze, aleUIImage.init(cgImage: )
zamiast tego możesz połączyć się za pomocą konstruktora.self.init(cgImage: cgImage, scale: image!.scale, orientation: image!.imageOrientation)
Oto inna opcja. Myślę, że chciałeś mieć dokładny obiekt UIImage.
Umieść to w swoim kodzie Swift i zadzwoń
Swift 3.1:
źródło
UIRectMake(0, 0, size.width, size.height)
, to wydaje się być prawidłowa:CGRectMake(0, 0, size.width, size.height)
.let
zamiastvar
niezmiennych zmiennych; tutaj wygląda na to, że anirect
ani nieimage
powinien używaćvar
deklaracji.Wersja Swift 4:
Stosowanie:
źródło
Czystszym podejściem byłoby hermetyzowanie logiki wewnątrz
UIImage
rozszerzenia:Teraz konsument może zadzwonić,
UIImage.imageWithColor(UIColor.blackColor())
aby stworzyć obraz z czarnym tłem.źródło
Podobna metoda, jeśli chcesz samodzielnie narysować obraz, a nie podłączenie go przez IBOutlet.
Trzecia metoda zapożyczania od Anthonyliao. Trochę bardziej skomplikowane:
źródło
UIImage
, nie ustawićUIImageView
.getImageWithColor(color: UIColor, size: CGSize) -> UIImage
jest wystarczająca jako odpowiedź, ponieważ myślę, że nie wszyscy będą używać tego razem z UIImageViewDrobne poprawki do doskonałej odpowiedzi @ neoneye, dzięki którym kod wywołujący nie musi tworzyć CGSize i zmienił nazwę, aby nie kolidowała z wieloma innymi:
Szybki 4
źródło
Możesz użyć nowego interfejsu API UIGraphicsImageRenderer na iOS 10 .
Oto rozszerzenie UIColor w Swift 3.1
źródło
Dobrym sposobem jest posiadanie takiej obliczonej właściwości:
Stosowanie:
źródło
Wersja Swift 3 @anthonyliao Zaakceptowana odpowiedź:
źródło
Prosty z zaokrąglonymi rogami
}
źródło