首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

移除 UIButton 层上的 CAShapeLayer 遮罩,以便取消遮罩动画 UIButton 大小更改

移除 UIButton 层上的 CAShapeLayer 遮罩,以便取消遮罩动画 UIButton 大小更改

要移除 UIButton 上的 CAShapeLayer 遮罩,可以通过以下步骤实现:

  1. 获取 UIButton 的 layer 属性,并将其类型转换为 CALayer。
  2. 检查 CALayer 的 mask 属性是否为 CAShapeLayer 类型。
  3. 如果 mask 属性是 CAShapeLayer 类型,则将其设置为 nil,以移除遮罩。

以下是一个示例代码:

代码语言:swift
复制
func removeMaskFromButton(_ button: UIButton) {
    guard let maskLayer = button.layer.mask as? CAShapeLayer else {
        return
    }
    button.layer.mask = nil
    maskLayer.removeFromSuperlayer()
}

要在 UIButton 大小更改时调用此方法,可以在 layoutSubviews() 方法中调用此方法,或者在更改 UIButton 大小时手动调用此方法。

注意:本答案不涉及云计算品牌商。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

iOS学习——UIPickerView实现年月选择器

,包括我们选择器标题,取消、确定按钮,蒙等大框架布局,然后是子类在基类基础添加UIPickerView来实现选择器基本功能以及数据加载和显示。...,然后在BaseView.h中注释我们说过了,点击背景遮罩图层和取消、确定按钮点击事件实现效果在基类中都是空白,具体效果在子类中进行重写来控制。...,那么我们为什么不直接在蒙添加弹出式图呢?...如果直接在蒙添加弹出式图作为子视图的话,我们布局相对会简单很多,这里涉及到一点就是子视图透明度是和父视图保持一致,如果直接将弹出视图加载到蒙遮罩视图上,会导致弹出视图透明度也为0.3,所以弹出视图不能直接加在蒙遮罩视图上...其中取消按钮就直接没有操作,dismiss当前界面,并注意要进行dealloc,创建视图要清除,避免内存泄露。蒙背景点击事件看需求,有的需要和取消一样效果,有的可能就无效果,自己添加即可。

4.2K130

iOS 自定义相机页面

在文中,顺便说下我碰到两个问题:拍摄页灰色透明遮罩绘制 和拍摄后黑屏问题 代码Demo都有了,我这里只说下流程。 首先写个继承UIImagePickerController自定义类。...遮罩区:创建一个遮罩View - (instancetype)initWithFrame:(CGRect)frame { if (self = [super initWithFrame:frame...*shapeLayer = [CAShapeLayer layer]; shapeLayer.path = bpath.CGPath; //添加图层蒙板 self.mView.layer.mask...完成一个点击事件,例如我: - (void)start:(UIButton *)sender { [self takePicture]; [self performSelector...[picker hiddenBtn];//拍照按钮隐藏 必须是拍照后隐藏,如果在拍照同时隐藏那么会出现隐藏动画影响picker绘制问题,图片成像可能是黑色。 我们回到界面的绘制上来。

2.5K10
  • 学会不一样Loading图

    2、 添加渐变色图层到挡住控件覆盖层 3、为渐变色图层设置mask,从而显示mask面积下面的渐变色图层(原理看下方) 原理: 遮罩必须至少有两个图层,上面的一个图层为“遮罩”,下面的称...“被遮罩”;这两个图层中只有相重叠地方才会被显示。...也就是说在遮罩中有对象地方就是“透明”,可以看到被遮罩对象,而没有对象地方就是不透明,被遮罩中相应位置对象是看不见。 它原理是:上面一遮罩,下面一是被遮罩。...遮罩图,自己是不显示。它只起到一个透光作用。假定遮罩是一个正圆,那么光线就会透过这个圆形,射到下面的被遮罩,只会显示一个圆形图形。...如果遮罩什么都没有,那么光线就无法透到下面来,那么下面的被遮罩什么也显示不出来。

    91340

    面试题型—iOS离屏渲染探索

    2、存在一些特殊效果,正常流程无法完成,必须使用离屏渲染,比如圆角、阴影和遮罩、高斯模糊、半透明图层混合等正常渲染流程采用油画算法由远及近渲染图层,当一个图层显示到屏幕后,帧缓冲区会立即删除这一图层数据...例如将这张图显示到屏幕可以分为两步: 1、先绘制黄色背景图层,显示到屏幕后,删除帧缓冲区中黄色图层数据。...但是如果缓存图像会经常被更改,则开启离屏缓存区反而会降低性能。...比如本身处于动画中,或者像tabeleViewcell上图片可能经常改变,则不要开启shouldRasterize 缓存图像过大,超过屏幕像素 2.5 倍,不会触发离屏渲染,所以开启shouldRasterize...因为 bt2 只设置了一个背景颜色,只有一个背景图层,直接将这一渲染到屏幕就可以了,不需要开辟离屏缓冲区。

    1K60

    实践-小效果 III

    饼状图.gif 大家都知道这是通过 CAShapeLayer 和 CABasicAnimation 结合起来实现,可是其中还是有需要注意地方,实现步骤大致如下: 绘制一个 CAShapeLayer...不用指定大小,_pieLayer = [CAShapeLayer layer]; 绘制三个 彩色扇形CAShapeLayer 并加载在 _pieLayer 。...绘制一个 遮盖住 这三个 CAShapeLayer CAShapeLayer 并赋值给 _pieLayer.mask ,我们都知道 maskLayer颜色是不会印象视图显示,视图显示只跟maskLayer..._pieLayer.mask 添加 CABasicAnimation 动画,使 _pieLayer.mask 动画绘制,就达到了 _pieLayer 动态绘制,其实是无法对 _pieLayer 动态绘制...如果在一个 UIButton 中你设置 setImage并且 setTitle 。你会发现,默认是 图片在左边,文字在右边。并且这跟 UIButton Frame无关。

    1.1K20

    Quartz2D复习(四) --- 图层CALayer和动画CAAnimation

    UIView本身不具备显示功能,是它内部才有显示功能 5)、通过CALayer对象,可以很方便调整UIView一些外观属性,比如:阴影、圆角大小、边框宽度和颜色。。。...: 默认为YES, 代表动画执行完毕后就从图层移除,图形会恢复到动画执行前状态。...对象加入后,组中所有动画对象可以同时并发运行   属性说明:   animations: 用来保存一组动画对象NSArray。...默认情况下,一组动画对象是同时运行,也可以通过设置动画对象beginTime属性来更改动画开始时间 13)、转场动画 --- CATransition   CATransition是CAAnimation...子类,用于做转场动画,能够为提供移除屏幕和移入屏幕动画效果。

    1.4K30

    绘图-几个较复杂统计图案例实现分析

    很多UIView)刚开始是不显示,加载在当前UIView,计算每一个点动画开始时间,达到小圆点依次作动画效果。...设置渐变图层 mask(遮罩)为一个CAShapeLayer maskLayer = [CAShapeLayer layer]; maskLayer.strokeColor = [...UIBezierPath,把这个路径拼接上X坐标轴两个垂直投影点形成一个底部矩形状封闭路径,把个路径作为渐变图层path,并绘制一条比这个UIBezierPath顶部低一点路径作为 渐变图层遮罩图层...遮罩同时做CABasicAnimation动画,渐变图层渐渐显现,渐变图层遮罩图层由 低路径过渡到高路径,就有了上图中渐变图层渐渐显现并逐渐身高效果。...在使用drawRect:重绘页面时注意首先移除已有的图层maskLayer 同时做动画

    1.4K20

    老司机带你走进Core Animation 之CAAnimation

    mask,这也是个有趣又有用属性,遮罩属性。可以以一个layerA作为另一个layerB遮罩,即layerB.mask = layerA。...值得注意是,结束代理中,有一个flag。他意思是如果动画正常播放完成的话,flag为YES。如果没有播放完成或者被移除则返回NO。 removedOnCompletion,是否在播放完成后移除。...这时你再改animation当然是不能更改动画效果了。 这里同时也引出了一点,当你将animation加入layer以后,你就无法再更改动画效果了。...这个时候你有三种选择: 更改锚点 更改layer 结合移动和转动 更改锚点就是将锚点移至你想旋转旋转中心。但是其实老司机不建议你修改锚点。因为锚点是一个layer参考点。...当你修改锚点以后将会影响layer所有相关属性以至于造成一些你所不希望后果。 更改layer就是扩展当前layer区域,以透明区域填补空白区域,强行让你所期望端点成为旋转中心。

    1.4K20

    直播APP常用动画效果

    所以每次访问NSCache,即使一次已经加载过,也需要判断返回值是否为空。 3、图片裁剪 为了减少图片资源大小,有时候会把多个帧动画做成连续一张图。...出现、烟花爆炸、画卷打开等效果,通过改变遮罩大小,影响原始图片展示,达到动画效果; 先新建一个CAShapeLayer,并设置为layer遮罩; 新建一个动画,设定初始和结束状态并赋值给CAShapeLayer...,完成一个遮罩动画。...天使动画图片大小为900KB,运行时占内存15MB,播放完毕后,如果收到内存不足警告会释放内存; 烟花动画图片大小为400KB,运行时占用内存为20MB,播放完毕后,会马上释放内存; 思考题?...1、为什么烟花动画图片大小比较小,运行时占用内存反而更多? 2、播放完毕马上释放和收到内存不足警告再释放,两种图片加载方式优缺点?

    1.6K80

    iOS动画-CAAnimation使用详解

    委托模式下动画区分 10.虚拟属性及其作用 11.动画取消 一、动画分类 1、实现动画方式 如果根据实现动画时直接操作对象类型,我们可以简单动画分为视图和图层两种;但事实,无论UIViewAnimaiton...removedOnCompletion属性默认为YES,表示动画完成后就会从图层移除,图层也会恢复到动画执行前状态;当其修改为NO时,那么图层将会保持动画结束后状态,此时fillMode属性也将生效...; 另外,removedOnCompletion设置为NO时,直到我们手动移除动画,否则动画将不会自动释放;所以通常我们此时会给动画添加一个非空键,这样可以在不需要动画时候把它从图层移除; 四、CAPropertyAnimation...;具体操作包括以下几个步骤: 1.使用UIKit提供UIBezierPath类创建贝塞尔曲线,作为飞机飞行路线轨迹; 2.使用CAShapeLayer在屏幕绘制曲线(此步骤对于动画不是必须...十一、在动画过程中取消动画 在使用动画过程中,我们可能需要适时移除不要动画,否则就可能造成内存泄漏问题;从图层中取消动画方法有以下两种方式: //方法1:取消指定动画 /* Remove any

    2.3K10

    iOS CALayer 简单介绍

    https://www.jianshu.com/p/09f4e36afd66 什么是CALayer: 总结:能看到都是uiview,uiview能显示在屏幕是因为它内部一个calyer。...在创建uiview时候,uiview内部会自动创建一个(calayer对象)通过uiviewlayer属性可以访问这个。...当uiview需要显示在屏幕时,会调用drawrect 方法进行绘制,并将所有的内容绘制在自己,绘制完毕之后,系统会将拷贝到屏幕,于是uiview就显示了。...换句话说,uiview本身并不具备显示功能,它内部才有显示功能。 CALayer基本功能 通过操作CALayer对象,可以调整uiview一些外观属性。...两种方式,一种是使用 n张图片去循环,这样的话对内存开销比较大,不建议使用,第二种就是采用CALayer相关属性  加上核心动画来实现:代码如下: //2.渐变转换为图形形成动画 CALayer

    65120

    想要漂亮蒙版指引吗?跟着我手把手教你写出来

    最近版本一个需求是给首页添加新人蒙版,类似的效果图如下图所示。 首页第一蒙版效果图 ? 首页蒙 首页第二蒙版效果图 ? 首页蒙2 个人中心蒙版效果图 ?...当是看了代码写法都很正常,并且类似的写法在 新人蒙版指引需求就表现很正常,为什么在 新人大礼包需求上面就表现不正常,时而出现时而不出现。 我感觉这个需求类代码有毒。...之后 keyWindow换回来之后,我们控件就被移除,之后就被释放了。让我们用 AppDelegate创建 window这样才保证不会出问题。 听完觉得说很有道理,就改了一下,果然解决了。...,用到了一个代理源用于获取需要添加对象。...用于绘制我们路径 做镂空 CAShapeLayer *shapeLayer = [CAShapeLayer layer]; shapeLayer.path = path.CGPath;

    1.4K20

    IOS开发系列——启动页专题【整理,部分原创】

    以前程序动画面(图片)只要准备一个 Default.png 就可以了,但是现在变得复杂多了。...iPad专用横向启动画面,可省略 1024x768或者1024x748 Default.png iPhone默认启动图片,如果没有提供上面几个iPad专用启动图片,则在iPad运行时也使用Default.png...(不推荐) 320x480或者320x460 Default@2x.png iPhone4启动图片640x960或者640x920 为了在iPad使用上述动画面,你还需要在info.plist中加入...但是这个窗口默认背景色是磨砂不透明,因此还需要把它背景色设为透明。这样看起来就像是全屏遮罩一样,但是由于系统不认为新View是全屏,所以上一个View也不会被unload。...my.oschina.net/amoyai/blog/94988 ios 实现引导页面效果 http://blog.csdn.net/leechee_1986/article/details/24850547 半透明遮罩是如何实现

    1.8K10

    iOS动画系列之七:实现类似Twitter启动动画1. CAKeyframeAnimation2. CAAnimationGroup3. 实现类似Twitter启动动画

    创建步骤: 创建关键帧动画对象 设置属性 添加到要作用layer 如果使用rect椭圆方式,动画会不连贯,停顿一下。...实现类似Twitter启动动画 3.1实现思路 1,在View设置一个东西能够遮挡住背景图; 2,把遮罩变成五角星; 3,让遮罩慢慢变大,中间可见区域越来越大。 yes!思路就是这样。...3.2 CALayer遮罩属性 CALayer本身有一个属性,叫mask。...设置了三个关键帧动画大小,以及这三个关键帧运动节奏。 然后,就好啦~然后,就好啦~然后,就好啦~然后,就好啦~ 哪尼?!!!就这样?!!对啊,就这样。...因为在工作中碰到大部分动画都是通过UIView动画block实现,其他都基本都是需要用到CAShapeLayer。我们下次玩点好玩吧~ 如果还有兴趣,可以看看本系列其他文章哈。

    1.4K30

    游戏开发中物理之布娃娃系统

    游戏开发中物理之布娃娃系统 介绍 设置布娃娃 创造物理骨骼 清理骨架 碰撞形状调整 关节调整 模拟布娃娃 碰撞遮罩 介绍 从3.1版开始,Godot支持布娃娃物理。...骨架按钮出现在顶部栏菜单: 单击它并选择选项。...碰撞形状调整 下一个任务是调整碰撞形状和物理骨骼大小,以匹配每个骨骼应模拟身体部位。 关节调整 调整碰撞形状后,布娃娃几乎准备就绪。您只需要调整销钉接头即可获得更好模拟效果。...PhysicalBone节点默认分配有不受约束销接头。要更改销钉接头,请选择PhysicalBone并在Joint部分中更改约束类型。在那里,您可以更改约束方向及其限制。...这是部分布娃娃模拟示例: 碰撞遮罩 确保正确设置碰撞和蒙版,以免KinematicBody胶囊不妨碍物理模拟: 有关更多信息,请阅读碰撞遮罩

    77840

    用flash做古诗动画_Flash制作跟我学 用遮罩技术制作古诗动画-FLASH课件制作(FLASH课件制作教程)-flash课件吧(湖北金鹰)…

    Flash制作跟我学用遮罩技术制作古诗动画 提示:遮罩—使用遮罩图层可以让Flash设计者有选择地显示图层某些部分,应用遮罩需要创建一个图层成为遮罩图层,而它下面的图层即成为被遮盖图层。...打开“文件”菜单,选择“导入”→“导入到舞台”命令把背景图片导入,然后在时间轴“图层1”中把图层名改为“背景”。...4 创建一个电影剪辑元件(命名为“动画”),现在进入元件编辑界面将诗词和遮罩元件组合为古诗动画。将古诗元件拖放入时间轴第一,图层名称更改为“古诗1”,位置“X,Y”为“-75×-160”。...在图层名称位置点击鼠标右键选择“遮罩”,把该图层变为“古诗1”遮罩。...再创建“遮罩2”,同样在第201帧处建立关键帧并把遮罩元件拖放入场景中,大小为“300×289”像素,位置“X,Y”为“-70×-460.1”。

    2.2K10
    领券