view的背景颜色和设置layer的背景颜色都是有效的,并且,设置view的背景色依然是通过layer来展示的,我们可以写如下的测试代码: UIView * view = [[UIView alloc...6.CAShapeLayer CAShapeLayer可以让我们在layer层是直接绘制出自定义的形状。 7.CATextLayer CATextLayer可以通过字符串进行文字的绘制。...三、设置与调整Layer层的内容 设置层的内容有下面三种方式: 1.可以通过设置CGImage为layer的内容。 2.可以通过代理方法来动态修改或者绘制层的内容。...CATransform3D sublayerTransform; //遮罩层layer @property(nullable, strong) CALayer *mask; //舍否进行bounds的切割,在设置圆角属性时会设置为...@property(getter=isOpaque) BOOL opaque; //重新加载绘制内容 - (void)display; //设置内容为需要重新绘制 - (void)setNeedsDisplay
重点是这里有一个初学者经常会犯的错误,同学们在绘制曲线的时候经常会以layer在父图层中的相对位置去绘制曲线,这是错的!!!应该以layer自身的坐标系划线。...那为什么0.75是在那个位置呢?请记住,在iOS中,以x轴正方向(即水平向右)为0度,顺时针旋转一周为360度。 其实说到这里CAShapeLayer的基本用法就结束了。...2.strokeEnd 为什么又说strokeEnd?你还说你不是凑字! 真不是,这次说他主要是想表达这个属性是默认支持隐式动画的。 隐式动画就是不用显示声明,系统默认为我们实现的动画。...注意奇数位为实线,偶数位为虚线,单位像素。系统会按照给定数组自动重复设置虚线。 lineDashPhase这个属性是告诉系统从多少开始计算这个距离。...对咯,就是以一个CATextLayer做红色的CALayer的mask,CATextLayer的字体设置有颜色,背景设置透明色,这样就只能显示出红色的CALayer的文字部分了把他封装在一个UIView
苹果官网给出CATextLayer的API解释 ---- 初始化一个CATextLayer CATextLayer *lary =[CATextLayer layer]; lary.string...设置文本,可能会产生模糊状态,因为该默认的分辨率不是retina,设置如下代码即可: */ CATextLayer与 CAGradientLayer(渐变图层)结合,[金闪闪动画字体] ?...段落样式 NSParagraphStyle //NSForegroundColorAttributeName 前景色 UIColor //NSBackgroundColorAttributeName 背景色...,取值为 NSString 对象,目前只有图版印刷效果可用: //NSAttachmentAttributeName NSTextAttachment 设置文本附件,常用插入图片 //NSLinkAttributeName...没卵用,不支持竖版 2.设置段落样式:段落样式中允许你设置文字与文字之间的行间距、字符间距、以及对齐模式,但是注意的是,在设置段落样式的时候,必须保证控件的 numberofline属性必须为0 NSMutableAttributedString
我们可以在项目的drawable目录下创建一个selector文件,在这里配置每种状态下视图对应的背景图片。...创建好了这个selector文件后,我们就可以在布局或代码中使用它了,比如将它设置为某个按钮的背景图,如下所示: 背景图设置为当前视图状态所对应的那张图片了。...那你可能会有疑问,在前面一篇文章中我们说到,任何一个视图的显示都要经过非常科学的绘制流程的,很显然,背景图的绘制是在draw()方法中完成的,那么为什么selectDrawable()方法能够控制背景图的改变呢...= INVALIDATED || isOpaque() !
我们可以在 Interface Builder 中将视图设置为不透明: ?...在 storyboard 中将 UIView 设置为不透明(查看大图) 或者我们可以在代码中修改 UIView 的 isOpaque 属性: view.isOpaque = true 将视图设置为不透明将使绘图系统在渲染屏幕时优化一些绘图性能...(查看大图) 上面显示的所有 label(“查看朋友”等)被红色突出显示,是因为当 label 被拖动到 storyboard 时,其背景颜色默认设置为透明。...(查看大图) 你可能已经注意到,即使你已将 UIImageView 设置为不透明并为其指定了背景颜色,模拟器仍将在 imageView 上显示红色。...01 后记 性能优化需要你在应用程序的功能之上编写更多的代码或配置其他设置。这可能会使您的应用程序交付时间超出预期,并且您将来会有更多代码需要维护,而更多代码意味着更多潜在的bug。
我们对当前视图状态截图,然后在我们改变原始视图的背景色的时候对截图快速转动并且淡出,图8.5展示了我们自定义的过渡效果。...这对于播放一段连续非循环的动画很有用,例如打开一扇门,然后关上它 把repeatDuration设置为INFINITY,于是动画无限循环播放,设置repeatCount为INFINITY也有同样的效果...但是记住了,当用它来解决这个问题的时候,需要把removeOnCompletion设置为NO,另外需要给动画添加一个非空的键,于是可以在不需要动画的时候把它从图层上移除。...一种方法是使用物理引擎来对运动物体的摩擦和动量来建模,然而这会使得计算过于复杂。我们称这种类型的方程为缓冲函数,幸运的是,Core Animation内嵌了一系列标准函数提供给我们使用。...那么你会疑惑为什么这不是默认的选择,实际上当使用UIView的动画方法时,他的确是默认的,但当创建CAAnimation的时候,就需要手动设置它了。
filter: invert() — 是从0到1的刻度,1是从白变黑。filter: hue-rotate() — 用于改变你元素的颜色,同时或多或少保持原本相同的色系。...在我们页面的body标签上添加这两个属性,我们就可以快速尝试把我们的网站变成"黑暗模式"。这里需要注意的是,如果body和html上没有设置background背景颜色,这个过滤就会不起效了哦。..., // 是否在cookie保存当前模式 - 默认: true, label: "?"..., // 切换模式按钮图标 - 默认: '' autoMatchOsTheme: true // 是否自动根据系统适应模式 - 默认: true }; let darkmode = new...知识总结 filter: invert() — 可以把页面从白变黑,也可以从黑变白。
它之所以被定义为id类型,是因为在Mac OS系统上,这个属性对CGImage和NSImage类型的值都起作用。如果你试图在iOS平台上将UIImage的值赋给它,只能得到一个空白的图层。...它是一个浮点数,默认为0(为0的时候就是直角),但是你可以把它设置成任意值。默认情况下,这个曲率值只影响背景颜色而不影响背景图片或是子图层。...如果设置为1.0,将会显示一个有轻微模糊的黑色阴影稍微在图层之上。...设置了动画的起点和终点之后,中间的值都是通过插值方式计算出来的。插值计算的结果由timingFunction指定,默认timingFunction为nil,会使用liner的,也就是变化是均匀的。...假设有一个动画,duration是8秒,变化值的起点是a终点是b(假设是透明度),那么在4秒处的值是多少呢? 可以通过计算为 a + x(4/8) * (b-a), 为什么这么计算呢?
= PFLAG_INVALIDATED || (fullInvalidate && isOpaque() !...= mLastIsOpaque)) { if (fullInvalidate) { mLastIsOpaque = isOpaque();...= VISIBLE)、 或者没有设置动画mCurrentAnimation == null等 (mCurrentAnimation在View源码是一个全局变量,跟动画有关,可以看一下源码) 】,...小拓展——子线程中为什么不能更新UI?...Thread.currentThread()是子线程, mThread是在构造函数中初始化的, ?
背景HazeOver 是一款可以高亮当前最前方窗口的 MacOS 应用,遗憾的是它不免费,官网售价高达54元。...我当真是不能理解为什么一个这么简单的东西竟然能要价这么高,所以我打算自已写一个类似的应用来满足我的需求。基本思路1....让遮罩窗口位于最前方窗口后面一番搜索查找,在 NSWindow 的官方文档上找到了答案,NSWindow 实例上有一个 order(_:relativeTo:) 的方法,可以指定这个窗口实例放在某个弹窗的上面或下面...没办法,经过一番网络搜刮,找到了一个可用的方法 CGWindowListCopyWindowInfo,这个方法返回一个有序的窗口数组,顺序就是从屏幕最前面到最后面,数组中的元素为 Dict,可以通过 kCGWindowNumber...实现平滑的过渡把 MaskWindow 直接放置在最前方的窗口后面,虽然能实现最前方窗口高亮的效果,但是当最前方窗口变化时,由于 MaskWindow 是直接出现在窗口后面的,所以原来高亮的窗口会由高亮突然变黑
我们刚接触android开发的时候,应该都是从写布局开始的,在写布局的时候一般组长都要求我们少嵌套,这个是为什么呢?这个就要从我们今天要分析的invalidate()分析。...= PFLAG_INVALIDATED || (fullInvalidate && isOpaque() !...从这里我们就知道了,首先会检测线程,也就是为什么在子线程更新UI为什么会崩溃的原因,然后经过一系列的判断进入到scheduleTraversals函数,在这个函数中可以看到会调用mTraversalRunnable...performDraw负责绘制,performDraw()会 调用draw,在调用drawSoftware /** * @return true if drawing was successful...canvas.isOpaque() || yoff != 0 || xoff !
方法中,首先先判断当前View树是否正在布局流程,接着为当前子View设置标记位,该标记位的作用就是标记了当前的View是需要进行重新布局的,接着调用mParent.requestLayout方法,这个十分重要...,调用onMeasure,对该View进行测量,接着最后为标记位设置为PFLAG_LAYOUT_REQUIRED,这个标记位的作用就是在View的layout流程中,如果当前View设置了该标记位,则会进行布局流程...Matrix childMatrix = child.getMatrix(); final boolean isOpaque = child.isOpaque() && !...= null); } } 可以看到,在该方法内部,先设置当前视图的标记位,接着有一个do…while…循环,该循环的作用主要是不断向上回溯父容器,求得父容器和子View需要重绘的区域的并集(dirty...#postInvalidate 这个方法与invalidate方法的作用是一样的,都是使View树重绘,但两者的使用条件不同,postInvalidate是在非UI线程中调用,invalidate则是在
DrawerLayout分为侧边菜单和主内容两个部分,侧边菜单可以根据手势或点击控制展开与隐藏,主内容区可随菜单点击而切换(自己实现); DrawerLayout 提供 当界面弹出的时候,主要内容区会自动背景变黑...,当点击内容区的时候,抽屉布局会消失 在屏幕边缘手势滑动 会拉出抽屉布局 注意:当按后退键的时候,如果抽屉布局正在显示,则需要关闭抽屉布局 效果 ?...注意:在侧滑菜单区必须设置 android:layout_gravity 这个属性,只要布局中设置了android:layout_gravity,它就是侧滑菜单,当然,它可以是任一View或ViewGroup...点击事件穿透问题 DrawerLayout界面点击事件穿透问题,即点击Drawerlayout上面的区域,会发现该位置DrawerLayout覆盖掉的区域的控件可以被点击 解决方法:在抽屉完全打开时设置...drawer.setClickable(true); 注意,在布局中设置没有效果,必须手动设置
1.2 stl中的红黑树结构 在该图中,设置了一个哨兵节点,哨兵节点的左指向最小节点5,最大节点的右指向哨兵节点header, 为什么要这样设计呢??...new Node(data); _root->_col = BLACK; return make_pair(iterator(_root),true); } KeyOfT kot;...= blackNum) { cout << "某条路径黑色节点的数量不相等" << endl; return false; } return true; }...三、map的模拟实现 3.1 insert的改装 在stl中 insert的返回值是pair 一开始我不太能理解为什么要这么设计。...(data); _root->_col = BLACK; return make_pair(iterator(_root),true); } KeyOfT kot;//控制 是在pair
---- 公共的步骤: 布局文件中添加使用 Toolbar 控件(纯色 Toolbar 背景色为颜色,图片 Toolbar 样式设置背景色为图片或添加一个 ImageView 控件),在文件根布局与 Toolbar...中添加 android:fitsSystemWindows="true",这个很重要,可以使背景图片延伸至状态栏,当然在 Java 文件中设置一样的效果; <?...正常纯色 Toolbar 样式 纯色 Toolbar 在使用中一般会将顶部状态栏设置与 Toolbar 背景色一致; val window = window window.addFlags(...被遮挡操作栏 Toolbar 在测试过程中会出现底部虚拟操作按纽栏目被隐藏,如下图,此时应注意设置 systemUiVisibility 属性。...则图片会被拉伸,当然和尚我认为根布局设置为 wrap_content 方式是不合理的。
二、红黑树原理详解 那么,红黑树为什么能够控制路径长度呢?...在节点构造当中,我们并没有设置节点的初始颜色,之后在实现节点插入的实现当中,我们会重点讨论初始颜色的问题。 2....为保持红黑树的性质,需要对原有树结构进行平衡调整。 颜色设置 我们首先来探讨新节点的颜色设置问题。 如果新插入的节点是根节点(树为空),毋庸置疑,为黑色。...如果新插入的节点不是根节点,那么能否设置初始颜色为黑色呢?...所以平衡调整结束后,一定要将根节点设置为黑色。
,我刷微博都没被背景分过心。...曾经在朋友圈还是空间来着看到过有人做过这个东西,当时感觉贼jer厉害,现在懂了原理之后,想尝试着做做,最开始凉了,放置了一段时间之后,换了另一种思路,姑且就做出来了这个switch关灯工具。...原来的尝试是想获取网页中的video或object等视频相关的标签进行判断,再把父级元素的z-index(网页中层次排序)设置高,然后加入一个稍微低于前面父级元素但高于网页中其他元素的黑色背景。...有人就要问了,那为什么是棕色皮肤人种的“蒜头鼻”呀?这个原因很简单,因为棕色皮肤人种介于白色皮肤和黑色皮肤之间,而关灯程序恰恰就是在白色的网页跟黑色的网页之间转换(大部分网页是白底,关灯后就变黑了。...(至于写的是啥视频里貌似能看到 2333 没啥用的动画效果: 使用方法: 将这个打了码的棕色人种的蒜头鼻拖进收藏夹 设置: 设置可以通过两种方式 手动点击桌子上的设置按钮,这样的话是个空的设置,留空的话为默认原始设置
, _right(nullptr) , _parent(nullptr) , _kv(kv) , _col(RED) {} }; 注:此处采用枚举来表示,当然也可以使用其他方式 在节点的定义中为什么要将节点的默认颜色给成红色的...: 如果默认颜色为黑,那么在插入中插入一个黑结点一定会让该路径上的黑结点数量加1,从而与其他路径上黑结点数量造成不一致,而一定会影响该棵红黑树 如果默认颜色为红,那么在插入中插入一个红结点,...,则进行右单旋转,p变黑,g变红 如果p为g的右孩子,cur为p的右孩子,则进行左单旋转,p变黑,g变红 抽象示图: 动态示图: 动图演示2: 3、双旋+变色 情况三: cur为红,p...,p旋转后再对g进行右单旋,旋转后将cur变黑,g变红 如果p为g的右孩子,cur为p的左孩子,则针对p做右单旋转,p旋转后再对g进行左单旋,旋转后将cur变黑,g变红 抽象示图: 动图演示...) { return true; } if (_root->_col == RED) { cout 为红色" << endl; return false
QuartzCore这个框架也许在一些同行的印象中以为就是 Layer + Path 也就是用来 “画画”的,其实这个框架里面的东西当仔细研究的时候还是很庞大的,就像我们以前有说过的 AVFoundation...import QuartzCore.CAShapeLayer /// 形状Layer import QuartzCore.CATextLayer...https://www.jianshu.com/p/df115ffc1076 import QuartzCore.CATiledLayer /// CATiledLayer为载入大图造成的性能问题提供了一个解决方案...UIImageView = { let imageView = UIImageView() imageView.isUserInteractionEnabled = true...CoreGraphics 甚至和CoreImage框架的区分等,这样一扯就扯远了 再比如说到CoreImage那你就还得和GPUImage一起了解一下,看一下他们之间的区别联系和结合使用等等,这些知识可能都不是我们经常会使用到的东西
领取专属 10元无门槛券
手把手带您无忧上云