`

用CALayer.Mask(遮罩)实现iphone图标的水晶立体效果

    博客分类:
  • ios
 
阅读更多

昨天打群雄一下打了两个“破敌”,比较空虚,然后想起周末觉得自己应用中的图案都是纯用Path画的平面效果,比较土,就研究了一下如何实现点时尚的效果。

最终完成效果如下:

而原图效果只是这样:

 

通过遮罩完成以上效果,代码非常简单,不过需要准备遮罩层要用的alpha通道图片,对于非常非常不美工的我来说,用d版的fireworks搞掂:

 

但是你并不能直接把这个遮罩蒙在你的图片上,这样的话,图片会变暗,而且效果是跟你期望的相反的,正确的做法是在图片上蒙一个某种色的层,然后给这个层应用这个遮罩,这样最终效果就是我们期望的。

不过这里我们还需要一个简单的遮罩,应用在整个图上,把它修正成圆角(因为原图是四方的):

这个遮罩很简单,圆角alpha通道全透明,把原图的四角给全透掉(遮罩原理就是在原图像素的alpha改成遮罩的alpha)。

好了,整个代码如下:

- (void)viewDidLoad {
    [super viewDidLoad];
    UIGraphicsBeginImageContext(icon.bounds.size);
    CGContextRef ctx = UIGraphicsGetCurrentContext();
    const CGFloat components[4] = {0.0,0.4,0.0,1.0};
    CGContextSetFillColor(ctx, components);
    CGContextFillRect(ctx, CGRectMake(0, 0, icon.bounds.size.width, icon.bounds.size.height));
    UIImage *background = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    
    UIImage *image = [UIImage imageNamed:@"icon.png"];
    UIImage *mask = [UIImage imageNamed:@"IconBase.png"];
    UIImage *roundCorner = [UIImage imageNamed:@"round-corner.png"];
    icon.image = image;
    
    CALayer* subLayer = [[CALayer layer] retain];
    subLayer.frame = icon.bounds;
    subLayer.contents = (id)[background CGImage];

    CALayer* maskLayer = [[CALayer layer] retain];
    maskLayer.frame = icon.bounds;
    maskLayer.contents = (id)[mask CGImage]; 
    [subLayer setMask:maskLayer];
    [[icon layer] addSublayer:subLayer];
    
    CALayer* roundCornerLayer = [[CALayer layer] retain];
    roundCornerLayer.frame = icon.bounds;
    roundCornerLayer.contents = (id)[roundCorner CGImage];
    [[icon layer] setMask:roundCornerLayer];
    
    [maskLayer release];
    [subLayer release];
    [roundCornerLayer release];


}
 

分享到:
评论

相关推荐

    CALayer.Mask(遮罩)实现iphone图标的水晶立体效果

    通过使用 CALayer 的遮罩(Mask)功能,我们可以轻松地实现 iphone 图标的水晶立体效果。下面,我们将详细介绍如何使用遮罩来实现这种效果。 首先,让我们了解一下什么是遮罩(Mask)。在图形编程中,遮罩是一个...

    ios-自定义CALayer.zip

    本示例中的"ios-自定义CALayer.zip"是一个教学项目,旨在指导开发者如何通过自定义CALayer来实现一个简单的星空模拟效果。尽管效果可能并不复杂,但这个例子对于初学者理解如何操作和扩展CALayer的潜力非常有帮助。 ...

    ios-CALayer.zip

    同时,通过设置`mask`属性,可以创建基于形状或图像的遮罩,实现部分透明或形状裁剪的效果。 十、响应式布局 虽然CALayer本身不支持Auto Layout,但可以通过`layoutIfNeeded`方法手动触发布局更新,结合Masonry或纯...

    遮罩镂空效果实现

    "遮罩镂空效果实现"是一个典型的案例,它涉及到对CALayer子类CAShapeLayer的深入理解和应用。在这个主题中,我们将探讨如何利用CAShapeLayer的UserEvenOddFillRules属性来创建支持任意镂空形状的效果。 首先,...

    ios-阴影遮罩.zip

    在iOS中,我们可以使用`CAShapeLayer`或者设置`layer.mask`属性来实现遮罩效果。遮罩层的形状决定可见区域,其透明度(alpha)值决定遮罩的透明度。 3. **视图动画(View Animation)** 标签中提到的“视图动画”...

    CALayer实现立体模型

    用代码实现三维立体图形

    iOS mask 层和 CAShapeLayer层中间挖去一部分

    本文将深入探讨如何通过源码分析来实现iOS中的`mask`层和`CAShapeLayer`层中间挖去一部分的效果。 首先,`CAShapeLayer`是`CALayer`的一个子类,它允许我们创建基于矢量图形的层。矢量图形的优势在于它们可以无损...

    利用UIBezierPath和CAShapeLayer实现的镂空及遮罩效果。

    本文将深入探讨如何使用它们来实现镂空和遮罩效果,这两种效果在用户界面设计中非常常见,可以增加应用的美观性和交互性。 首先,UIBezierPath是UIKit框架中的一个类,它允许我们创建自定义的矢量图形路径。通过一...

    CALayer基本使用

    **CALayer基本使用** ...总之,理解和熟练运用CALayer是iOS开发中的重要技能,它能帮助开发者实现许多视觉效果和高性能的动画。通过对Layer的深入学习,开发者可以更好地掌控应用程序的界面表现和性能。

    swift-LayerMaskKeyAnimation一个mask动画

    在描述中提到的“一个mask动画”,我们可以理解为利用CALayer的mask属性来创建动态的遮罩效果。CALayer是Core Animation的基础类,它可以被用来构建和管理视图的渲染层次。其中,mask属性是一个CALayer实例,它决定...

    iOS简单的GIF图片遮罩

    在iOS中,我们可以使用CALayer的mask属性来实现这一功能。遮罩层是一个黑白图像,白色部分表示可见,黑色部分表示不可见,灰度部分则根据灰度值决定透明度。 要实现GIF图片遮罩,我们需要以下步骤: 1. **加载GIF...

    CALayer的基本使用demo

    `CALayer`的`mask`属性可以接受一个`CALayer`作为蒙版,实现基于图像的裁剪效果。`CAGradientLayer`和`CAShapeLayer`也可以用作蒙版。 ### 11. 层的混合模式 `CALayer`支持多种混合模式,通过调整`...

    UIIMage 改变颜色和遮罩

    项目中可能有一个UIImageView用于显示原始图片,一个UIButton用于触发颜色更改或遮罩应用操作,以及一个自定义的UIView或CALayer实现遮罩效果。用户点击按钮后,应用会根据选择的操作改变图片的颜色或应用遮罩。 ...

    CALayer的使用

    例如,`maskLayer`属性可以为层添加遮罩,实现不规则形状的视图。`shadowPath`和`shadowColor`可以设置阴影效果,而`borderRadius`则能创建圆角效果。这些特性使我们能够实现更加精致的界面设计。 `CALayer`还可以...

    IOS软件开发ObjectiveCUIView动画和CALayer动画.ppt

    这两种动画方式虽然都可以实现丰富的视觉效果,但它们有着不同的特性和使用场景。 首先,让我们了解`UIView`动画。UIView动画是iOS中最基础的动画类型,主要用于处理UIView及其子类的变化。它可以实现诸如坐标改变...

    CAEmitterLayer之实现“红包雨”效果.zip

    在iOS开发中,为了创建各种动态视觉效果,如火焰、雪花、粒子系统等,我们可以使用Core Animation框架中的`CAEmitterLayer`。这个类提供了一种强大的机制,用于模拟粒子发射器,可以用来实现复杂的动画效果,例如...

    ios-优雅的实现CALayer的"AutoLayout"的两种方案.zip

    通常,我们使用AutoLayout来实现这一目标。然而,对于`CALayer`对象,它们并不直接支持AutoLayout。但通过一些技巧,我们可以让`CALayer`也能享受到类似AutoLayout的功能。本篇文章将探讨两种优雅地实现`CALayer` ...

    iphone上倒影效果源码

    使用`CAAnimation`类,可以平滑地改变CALayer的属性,比如改变倒影的透明度或位置,以实现动态效果。 7. **性能考虑**:虽然CALayer和Core Graphics提供了强大的功能,但创建和更新倒影会消耗性能,特别是在处理...

    iOS使用CALayer 实现时钟demo

    原理:使用CALayer 实现时钟 文章:https://kunnan.blog.csdn.net/article/details/74135552

Global site tag (gtag.js) - Google Analytics