Mar*_*rty 79 alpha opacity uiimageview uiimage ios
我知道你可以用UIImageView做到这一点,但它可以用于UIImage吗?我想让UIImageView的动画图像数组属性成为同一图像但具有不同不透明度的数组.思考?
Nic*_*247 118
我只需要这样做,但认为史蒂文的解决方案会很慢.这应该有希望使用图形硬件.在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;
}
Run Code Online (Sandbox Code Playgroud)
Mat*_*art 78
设置其显示的视图的不透明度.
UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageWithName:@"SomeName.png"]];
imageView.alpha = 0.5; //Alpha runs from 0.0 to 1.0
Run Code Online (Sandbox Code Playgroud)
在动画中使用它.您可以在动画中更改持续时间的Alpha.
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:1.0];
//Set alpha
[UIView commitAnimations];
Run Code Online (Sandbox Code Playgroud)
Dev*_*n B 45
根据Alexey Ishkov的回答,但在Swift中
我使用了UIImage类的扩展.
斯威夫特2:
UIImage扩展:
extension UIImage {
func imageWithAlpha(alpha: CGFloat) -> UIImage {
UIGraphicsBeginImageContextWithOptions(size, false, scale)
drawAtPoint(CGPointZero, blendMode: .Normal, alpha: alpha)
let newImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return newImage
}
}
Run Code Online (Sandbox Code Playgroud)
使用:
let image = UIImage(named: "my_image")
let transparentImage = image.imageWithAlpha(0.5)
Run Code Online (Sandbox Code Playgroud)
Swift 3/Swift 4:
请注意,此实现返回可选的UIImage.这是因为在Swift 3中UIGraphicsGetImageFromCurrentImageContext现在返回一个可选项.如果上下文为nil或未创建的值,则此值可以为nil UIGraphicsBeginImageContext.
UIImage扩展:
extension UIImage {
func image(alpha: CGFloat) -> UIImage? {
UIGraphicsBeginImageContextWithOptions(size, false, scale)
draw(at: .zero, blendMode: .normal, alpha: alpha)
let newImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return newImage
}
}
Run Code Online (Sandbox Code Playgroud)
使用:
let image = UIImage(named: "my_image")
let transparentImage = image?.image(alpha: 0.5)
Run Code Online (Sandbox Code Playgroud)
小智 16
有更简单的解决方案:
- (UIImage *)tranlucentWithAlpha:(CGFloat)alpha
{
UIGraphicsBeginImageContextWithOptions(self.size, NO, self.scale);
[self drawAtPoint:CGPointZero blendMode:kCGBlendModeNormal alpha:alpha];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return image;
}
Run Code Online (Sandbox Code Playgroud)
嘿嘿,感谢 Xamarin 用户!:) 这里它被翻译成 c#
//***************************************************************************
public static class ImageExtensions
//***************************************************************************
{
//-------------------------------------------------------------
public static UIImage WithAlpha(this UIImage image, float alpha)
//-------------------------------------------------------------
{
UIGraphics.BeginImageContextWithOptions(image.Size,false,image.CurrentScale);
image.Draw(CGPoint.Empty, CGBlendMode.Normal, alpha);
var newImage = UIGraphics.GetImageFromCurrentImageContext();
UIGraphics.EndImageContext();
return newImage;
}
}
Run Code Online (Sandbox Code Playgroud)
用法示例:
var MySupaImage = UIImage.FromBundle("opaquestuff.png").WithAlpha(0.15f);
Run Code Online (Sandbox Code Playgroud)