Ich muss Profil ImageView für den Chat mit einer bestimmten Anzahl von Mitgliedern zu implementieren.Profil ImageView von mehreren Bildern
Es sollte dieser wie aussehen:
So auf die Menge der Mitglieder in Abhängigkeit, Imageview auf geeignete Teile aufgeteilt werden sollte, die entsprechende Fotos von jedem Chat-Mitgliedern bestehen sollte.
upd: Ich fand eine Lösung (siehe unten) und es funktioniert, aber einige Bilder sind gestreckt, weil ihr reales Verhältnis 1: 1 ist. Wie dehnt man UIImage
(mit 1: 1-Verhältnis) proportional zur Rechteckgröße?
class ProfileImageHelper {
class func collageImage (rect:CGRect, images:[UIImage]) -> UIImage {
let maxImagesPerRow = 2
let maxSide = rect.width/CGFloat(maxImagesPerRow)
var index = 0
var currentRow = 1
var xtransform:CGFloat = 0.0
let transformOffset:CGFloat = 1.5
var ytransform:CGFloat = 0.0
var smallRect:CGRect = CGRect.zero
UIGraphicsBeginImageContextWithOptions(rect.size, false, 0.0)//UIScreen.main.scale)
for img in images {
index += 1
let x = index % maxImagesPerRow //row should change when modulus is 0
//row changes when modulus of counter returns zero @ maxImagesPerRow
if x == 0 {
//last column of current row
//xtransform += CGFloat(maxSide)
smallRect = CGRect(x: xtransform, y: ytransform, width: maxSide - transformOffset, height: (rect.size.height/CGFloat(currentRow)) - transformOffset)
//reset for new row
currentRow += 1
xtransform = 0.0
ytransform = (maxSide * CGFloat(currentRow - 1)) + transformOffset
} else {
//not a new row
if xtransform == 0 {
//this is first column
//draw rect at 0,ytransform
smallRect = CGRect(x: xtransform, y: ytransform, width: maxSide - transformOffset, height: (rect.size.height/CGFloat(currentRow)) - transformOffset)
xtransform += CGFloat(maxSide) + transformOffset
} else {
//not the first column so translate x, ytransform to be reset for new rows only
smallRect = CGRect(x: xtransform, y: ytransform, width: maxSide - transformOffset, height: (rect.size.height/CGFloat(currentRow)) - transformOffset)
xtransform += CGFloat(maxSide) + transformOffset
}
}
//draw in rect
img.draw(in: smallRect)
}
let outputImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return outputImage!
}
}
Irgendwelche Vorschläge?
die Bilder auf Core Graphics ziehen und zurück als UIImage. – GeneCode
beste Weise, das zu tun, benutzen Sie 3 Bildansicht und in diesem Imageview zeichne es mit breazerpath UIBezierPath für cornerradius für 3 diffent Bild –
Ein UIImageView ist genug. Warum verschwenden Sie die Ressource mit 3 ImageView für solch eine einfache Komponente? – GeneCode