Próbálta már valaki tényleges dologra használni a chatgpt-t? Én meglepődtem rajta, hogy egész szépen válaszolgat, szép magyarsággal. Programozási kérdéseket teszek fel neki, amire egész jól meg tudja mondani a válaszokat, ha jól körülhatárolom, hogy mire szeretném használni. Bár egy beszélgetésen belül képes elfelejteni a kontextust, de ha emlékeztetem rá, akkor magára talál. De van, hogy félre is ért valamit.
Ez a mai beszélgetésem vele:
Kérdésem: "Hogyan tudok renderelni UIImage képet a háttérben swift programozási nyelven?
"
Keresés, amire elkezdett keresni: “render UIImage in background swift”
Erre viszont olyan válaszokat dobott, hogy hogyan tudok beállítani hátteret egy képnek (pl. UIImageView segítségével).
Aztán jeleztem neki, hogy nem a háttér színt szeretném megváltoztatni, hanem a háttérben futtatni. És írt 3 lehetésges megoldást (csak sima szövegként, nem írt program sorokat), hogy hogyan lehet bármit futtatni a háttérben.
Erre emlékeztetnem kellett, hogy UIImage-t szeretnék renderelni a háttérben és visszadobott egy ilyen kódot:
let backgroundQueue = DispatchQueue(label: "com.app.queue", qos: .background)
backgroundQueue.async {
// itt rendereld le a UIImage objektumodat
}
Tetszik benne, hogy magyarul írta bele a megjegyzést.
Aztán írtam neki, hogy szeretném SwiftUI alatti async segítségével megoldani. Erre dobott három lehetséges megoldást: AsyncImage, egy third party library megoldást is (tök jó, hogy ilyeneket is megmutat) valamint egy harmadikat, amelyik egyáltalán nem volt async.
Közöltem vele, hogy az utolsó megoldás nem aszinkron megoldás és megkérdeztem, hogy hogyan lehet azt megoldani aszinkron módon.
Bocsánatot is kért majd újra elővette a fenti program kódot, de már konkrétan UIImage rendereléssel együtt.
Aztán emlékeztetnem kellett rá, hogy ok, de korábban említettem, hogy SwiftUI async-el szeretném megoldani, erre visszadobta az AsyncImage megoldást.
Erre ezt írtam:
“Jó lenne, ha a kép fájlban lenne, de nem így van. A kép, amit renderelni szeretnék egy CALayer. Ezt szeretném renderelni UIImage képre SwiftUI async módon.”
És jött ez a választ:
Értem. Ha a kép egy CALayer objektum, akkor egy lehetséges megoldás az, hogy használj egy UIGraphicsImageRenderer objektumot, amely segítségével renderelhetsz egy CALayer objektumot UIImage objektummá. Például így:
let layer = CALayer()
// itt állítsd be a layer tulajdonságait
let renderer = UIGraphicsImageRenderer(size: layer.bounds.size)
let image = renderer.image { context in
layer.render(in: context.cgContext)
}
Ha SwiftUI async módon szeretnéd ezt megtenni, akkor használhatsz egy async/await mintát, amely lehetővé teszi, hogy aszinkron módon hívd meg a renderelést. Például így:
func fetch(_ layer: CALayer) async throws -> UIImage {
let renderer = UIGraphicsImageRenderer(size: layer.bounds.size)
let image = try await withCheckedThrowingContinuation { continuation in
DispatchQueue.global().async {
do {
let image = renderer.image { context in
layer.render(in: context.cgContext)
}
continuation.resume(returning: image)
} catch {
continuation.resume(throwing: error)
}
}
}
return image
}
Remélem, ez segített. Ha még van kérdésed, szívesen válaszolok.
Összességében: érdekes, hogy többször emlékeztetnem kellett rá, hogy vegye figyelembe az előzőekben írt kéréseimet. Ezt leszámítva már nem egyszer adott olyan választ, ami alapján el tudtam indulni. Ha nem is a konkrét megoldást mondja sokszor, de azért szépen felhívja a figyelmem a lehetőségekre. Egyébként a Bing keresőben sokszor nem találom meg a választ a kérdésemre. A Google egy fokkal jobb találatokat ad, de lehet csak azért, mert már ismer engem. Továbbá valószínűleg az is baj, hogy nem jól kérdezek. Ez utóbbi hiba kiküszöbölésére tök jó a chat robot Bár néha lehet lassú ahogy válaszol és néha emlékeztetni kell a keresés kontextusára, viszont iszonyat jól megérti a dolgokat magyarul is és szép magyarsággal válaszol. Persze lehet látni a válaszokon, hogy beégetett szövegek, mert egy idő után feltűnik, hogy ismételget kifejezéseket.
Van valakinek tapasztalata? Kíváncsi lennék mások véleményére is.