Ich musste das nur tun, dachte aber, dass Stevens Lösung langsam sein würde. Dies sollte hoffentlich Grafik HW verwenden. Erstellen Sie eine Kategorie auf UIImage:
- (UIImage *)imageByApplyingAlpha:(CGFloat) alpha {
UIGraphicsBeginImageContextWithOptions(self.size, NO, 0.0f);
CGContextRef ctx = UIGraphicsGetCurrentContext();
CGRect area = CGRectMake(0, 0, self.size.width, self.size.height);
CGContextScaleCTM(ctx, 1, -1);
CGContextTranslateCTM(ctx, 0, -area.size.height);
CGContextSetBlendMode(ctx, kCGBlendModeMultiply);
CGContextSetAlpha(ctx, alpha);
CGContextDrawImage(ctx, area, self.CGImage);
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return newImage;
}
Stellen Sie die Deckkraft der Ansicht ein, in der sie angezeigt wird.
Verwenden Sie dies in einer Animation. Sie können das Alpha in einer Animation für eine bestimmte Dauer ändern.
quelle
UIButton
genau das, was ich brauchte.Basierend auf Alexey Ishkovs Antwort, aber in Swift
Ich habe eine Erweiterung der UIImage-Klasse verwendet.
Swift 2:
UIImage-Erweiterung:
Benutzen:
Swift 3/4/5:
Beachten Sie, dass diese Implementierung ein optionales UIImage zurückgibt. Dies liegt daran, dass in Swift 3
UIGraphicsGetImageFromCurrentImageContext
jetzt ein optionales zurückgegeben wird. Dieser Wert kann Null sein, wenn der Kontext Null ist oder was nicht mit erstellt wurdeUIGraphicsBeginImageContext
.UIImage-Erweiterung:
Benutzen:
quelle
Swift 3
Version.Es gibt eine viel einfachere Lösung:
quelle
Mir ist klar, dass dies ziemlich spät ist, aber ich brauchte so etwas, also habe ich eine schnelle und schmutzige Methode entwickelt, um dies zu tun.
quelle
setImage:withAlpha:
image:withAlpha:
?Hey hey danke vom Xamarin User! :) Hier wird es in c # übersetzt
Anwendungsbeispiel:
quelle
gleiches Ergebnis wie andere, anderer Stil:
quelle
Swift 5:
quelle
Wenn Sie mit Metall-Rendering experimentieren und das von imageByApplyingAlpha in der ersten Antwort generierte CGImage extrahieren, erhalten Sie möglicherweise ein Metall-Rendering, das größer ist als erwartet. Während Sie mit Metal experimentieren, möchten Sie möglicherweise eine Codezeile in imageByApplyingAlpha ändern:
Wenn Sie ein Gerät mit einem Skalierungsfaktor von 3,0 wie das iPhone 11 Pro Max verwenden, erhalten Sie mit dem oben gezeigten Skalierungsfaktor 0,0 ein CGI-Bild, das dreimal größer ist als erwartet. Durch Ändern des Skalierungsfaktors auf 1,0 sollte eine Skalierung vermieden werden.
Hoffentlich erspart diese Antwort Anfängern viel Ärger.
quelle