kb9*_*920 7 objective-c uiimageview uiimage ios
我们可以在图像上设置下面的形状UIImageView.
任何的想法!
谢谢

Mar*_*ens 14
像其他人建议的那样,我会使用图像的mask属性.
来自Apple的有关该mask物业的信息:
图层的Alpha通道决定了图层内容和背景的显示量.完全或部分不透明的像素允许底层内容显示但完全透明的像素阻止该内容.此属性的默认值为nil nil.
配置蒙版时,请记住设置蒙版图层的大小和位置,以确保它与蒙版图层正确对齐.
最后一句很重要!
我用Sketch创建了一个透明背景(PNG)的黑色图像.
将其添加到Assets.xcassets文件夹中.我的图像被调用profileMask.
为图像视图创建一个插座.我打电话给我profileImageView.
override func viewDidLoad() {
super.viewDidLoad()
let maskImageView = UIImageView()
maskImageView.contentMode = .scaleAspectFit
maskImageView.image = #imageLiteral(resourceName: "profileMask")
maskImageView.frame = profileImageView.bounds
profileImageView.mask = maskImageView
}
Run Code Online (Sandbox Code Playgroud)
注意:
伙计们,这是一件痛苦事.我试图创建一个Bezier路径,但说实话,我的技巧是制作一个与面具相匹配的精确形状对我来说是不可能的.如果你有能力做到这一点,Bezier Path可能看起来非常好,但我不这样做.:(
所以我有了一个想法,"如果我只使用蒙版图像作为边框怎么办?" 有效!这样做的好处是你可以在将来使用任何面具形状,它将为它创建一个边框,而不必弄清楚bezier路径.
我是这样做的:

profileImageView掩码并将色调颜色更改为我想要的边框.profileImageView负2点相同的大小(以显示将成为边框的底层蒙版图像).profileImageView.这是viewDidLoad中的代码:
override func viewDidLoad() {
super.viewDidLoad()
// Add border first (mask image)
profileImageView.contentMode = .scaleAspectFit
profileImageView.tintColor = .lightGray // Border Color
profileImageView.image = #imageLiteral(resourceName: "profileMask")
// Profile Image
let profileImage = UIImageView()
profileImage.image = #imageLiteral(resourceName: "Profile")
profileImage.contentMode = .scaleAspectFill
// Make a little bit smaller to show "border" image behind it
profileImage.frame = profileImageView.bounds.insetBy(dx: 2, dy: 2)
// Mask Image
let maskImageView = UIImageView()
maskImageView.image = #imageLiteral(resourceName: "profileMask")
maskImageView.contentMode = .scaleAspectFit
maskImageView.frame = profileImage.bounds
// Apply mask to profile iamge
profileImage.mask = maskImageView
// Add profile image as a subview on top of the "border" image
profileImageView.addSubview(profileImage)
}
Run Code Online (Sandbox Code Playgroud)
所以现在我们运行它时看起来像这样:
如果我们使用蒙版和边框宽度属性创建自定义UIImageView,那可能真的很酷.然后你可以只分配这些属性,自定义类将处理其余的.让我知道,如果你们想看到这样的东西,我会创建它并在这里发布.也许还为我的频道制作了一个YouTube视频教程.
您可以使用maskimageView的CALayer的属性:
CALayer *mask = [CALayer layer];
mask.contents = (id)[[UIImage imageNamed:@"mask.png"] CGImage];
mask.frame = CGRectMake(0, 0, imageView.image.size.width, imageView.image.size.height);
imageView.layer.mask = mask;
imageView.layer.masksToBounds = YES;
Run Code Online (Sandbox Code Playgroud)
这仅适用于ImageView,因此如果您想直接更改UIImage,则应使用Core Graphics掩码:
- (UIImage*) maskImage:(UIImage *)image withMask:(UIImage *)maskImage {
CGImageRef maskRef = maskImage.CGImage;
CGImageRef mask = CGImageMaskCreate(CGImageGetWidth(maskRef),
CGImageGetHeight(maskRef),
CGImageGetBitsPerComponent(maskRef),
CGImageGetBitsPerPixel(maskRef),
CGImageGetBytesPerRow(maskRef),
CGImageGetDataProvider(maskRef), NULL, false);
CGImageRef maskedImageRef = CGImageCreateWithMask([image CGImage], mask);
UIImage *maskedImage = [UIImage imageWithCGImage:maskedImageRef];
CGImageRelease(mask);
CGImageRelease(maskedImageRef);
// returns new image with mask applied
return maskedImage;
}
Run Code Online (Sandbox Code Playgroud)
小智 5
是的,您可以在UIImage上设置形状.首先,在项目中添加Mask图像(您想要的形状).并编写这些代码.
[yourImageView setImage:[self createMaskImage:yourImage withMask:MaskImage]];
- (UIImage*) createMaskImage:(UIImage *)image withMask:(UIImage *)maskImage {
CGImageRef maskRef = maskImage.CGImage;
CGImageRef mask = CGImageMaskCreate(CGImageGetWidth(maskRef),
CGImageGetHeight(maskRef),
CGImageGetBitsPerComponent(maskRef),
CGImageGetBitsPerPixel(maskRef),
CGImageGetBytesPerRow(maskRef),
CGImageGetDataProvider(maskRef), NULL, false);
CGImageRef masked = CGImageCreateWithMask([image CGImage], mask);
return [UIImage imageWithCGImage:masked];
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3949 次 |
| 最近记录: |