整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

手把手,带你给图像视图添加圆角效果「原创iOS开发-

手把手,带你给图像视图添加圆角效果「原创iOS开发-Xcode教程」

.5 给图像视图添加圆角效果 [原创iOS开发-Xcode教程]

1. 双击打开之前创建的空白项目。

2. 本节课将为您演示,如何给一张矩形图片,添加圆角的效果。首先在一个空白项目中,打开视图控制器的代码文件。

3. 接着开始编写代码,实现这项功能。

4. 首先从项目中,读取一张之前添加的图片文件。

5. 初始化一个图像视图对象,用来显示读取的图片。

6. 初始化一个原点在(10, 80),宽度和高度都是300的矩形常量,作为图像视图的显示区域。

7. 设置图像视图的显示区域。

8. 接着设置图像视图层的圆角半径大小,使其半径大小等于图像视图宽度的一半。

9. 继续设置图像视图层的遮罩覆盖属性,进行边界裁切。

10. 将图像视图对象,添加到当前视图控制器的根视图。点击[编译并运行]按钮,打开模拟器预览效果。

11. 从弹出的模拟器中可以看出,您已经给图像视图添加了圆角效果。最后点击[停止]按钮,关闭模拟器,并结束本节课程。

每天几分钟,手把手带你轻松学会iOS开发

本文整理自:《互动教程 for Xcode9

& Swift4》APP, 非特殊说明,本文版权归原作者所有。

原文:http://coolketang.com/staticCoding/5a990dd8d50eee2ea302a1ef.html

文章标签: ios开发

个人分类: iOS移动开发

所属专栏: iOS开发从入门到精通

上一篇2.4 给图像视图添加边框效果 [原创iOS开发-Xcode教程] 下一篇2.6 给图像视图添加阴影效果 [原创iOS开发-Xcode教程]

几日,随着小白对HTML5认识的提升,他自己没事浏览网页的时候总会注意一些特殊的展示效果,让他印象最深刻的一个效果就是用户头像了,一个矩形的图片怎么就显示成圆形了呢?一上午没想明白,下午看着老朱没什么事,就去向老朱请教:“朱哥!网页上的图片怎么能显示成圆角呢?特别是正圆形是怎么做出来的啊?”

老朱随口说道:“border-radius啊!之前我们已经用过几次了啊!”

小白说:“这不是控制容器圆角的么?图片也可以控制么?”

老朱说:“讲图片的时候我不是告诉过你了么?肯定是没好好听,图片标签img也是一个容器,它是一个放图片的容器,在img里面显示什么图片是靠src属性来决定的。既然是容器你不是就可以用border-radius来控制了么?你试试!”

小白高兴的说道:“真的成圆角了啊!我要把他变成正圆,是不是圆角设置成它宽度的一半就可以了?”

老朱说:“你先试试吧!试玩就知道了!”

“不行啊!这是怎么回事?”

老朱跟小白说:“css的圆角属性值最多是边的一半!你的图片宽比高大,所以圆角值最多位高的一半!你可以先尝试把图片的宽高设置成一样的看看!”

“果然变成正圆了,可是这样的话图片就有变形了,如果小头像的话还好说,大头像可就不好看了!”

老朱说道:“所以现在很多网站头像上传的时候都会让用户截取一个正方形的图片生成头像,就是为了方便进行圆角控制!”

小白说:“有没有折中的方法?假如网站没有用户设置正方形头像的功能,还不想让图片变形呢?”

老朱说:“正圆显示的肯定是一个高和宽一样的区域,所以图片被截取肯定是不可避免的了。你可以给图片外部套一个div容器,让这个div容器的宽度高度一致,并且设置超出隐藏。这样设置一下div的圆角就可以了!你试试看”

小白做好以后说道:“我又发现一个问题,div设置宽和高一样以后,图片如果高比宽小,图片高度得跟父容器高度一致才能出来效果!而图片高比宽大,则需要设置图片宽度和父容器宽度一致。我觉得要把它完善必须使用js来判断图片宽和高的比例进行动态设置。”

“嗯,你可以试试!”

聪明的大家,你们有没有什么更好的图片圆角方式呢?


想学H5的朋友可以关注老炉,您的关注是我持续更新《小白HTML5成长之路》的动力!

天,我们来看这么一个非常常见的切图场景,我们需要一个带圆角的虚线边框,像是这样:

这个我们使用 CSS 还是可以轻松解决的,代码也很简单,核心代码:

div {
border-radius: 25px;
border: 2px dashed #aaa;
}

但是,原生的 dashed 有一个问题,就是我们无法控制虚线的单段长度与间隙

假设,我们要这么一个效果呢虚线效果呢:

此时,由于无法控制 border: 2px dashed #aaa 产生的虚线的单段长度与线段之间的间隙,border 方案就不再适用了。

那么,在 CSS 中,我们还有其它方式能够实现带圆角,且虚线的单段长度与线段之间间隙可控的方式吗?

本文,我们就一起探讨探讨。

实现不带圆角的虚线效果

上面的场景,使用 CSS 实现起来比较麻烦的地方在于,图形有一个 border-radius。

如果不带圆角,我们可以使用渐变,很容易的模拟虚线效果。

我们可以使用线性渐变,轻松的模拟虚线的效果:

div {
width: 150px;
height: 100px;
background: linear-gradient(90deg, #333 50%, transparent 0) repeat-x;
background-size: 4px 1px;
background-position: 0 0;
}

看看,使用渐变模拟的虚线如下:

解释一下上面的代码:

  1. linear-gradient(90deg, #333 50%, transparent 0),实现一段渐变内容,100% - 50% 的内容是 #333 颜色,剩下的一半 50% - 0 的颜色是透明色 transprent
  2. repeat-x 表示只在 x 方向重复
  3. background-size: 4px 1px 表示上述渐变内容的长宽分别是 4px\ 1px,这样配合 repeat-x就能实现只有 X 方向的重复
  4. 最后的 background-position: 0 0 控制渐变的定位

因此,我们只需要修改 background 的参数,就可以得到各种不一样的虚线效果:

完整的代码,你可以戳这里:CodePen Demo -- Linear-gradient Dashed Effect

并且,渐变是支持多重渐变的,因此,我们把容器的 4 个边都用渐变表示即可:

div {
background:
linear-gradient(90deg, #333 50%, transparent 0) repeat-x,
linear-gradient(90deg, #333 50%, transparent 0) repeat-x,
linear-gradient(0deg, #333 50%, transparent 0) repeat-y,
linear-gradient(0deg, #333 50%, transparent 0) repeat-y;
background-size: 4px 1px, 4px 1px, 1px 4px, 1px 4px;
background-position: 0 0, 0 100%, 0 0, 100% 0;
}

效果如下:

但是,如果要求的元素带 border-radius 圆角,这个方法就不好使了,整个效果就会穿帮。

因此,在有圆角的情况下,我们就需要另辟蹊径。

利用渐变实现带圆角的虚线效果

当然,本质上我们还是需要借助渐变效果,只是,我们需要转换一下思路。

譬如,我们可以使用角向渐变。

假设,我们有这么一个带圆角的元素:

<div></div>
div {
width: 300px;
height: 200px;
background: #eee;
border-radius: 20px;
}

效果如下:

如果我们修改内部的 background: #eee,把它替换成重复角向渐变的这么一个图形:

div {
//...
- background: #eee;
+ background: repeating-conic-gradient(#000, #000 3deg, transparent 3deg, transparent 6deg);
}

解释一下,这段代码创建了一个重复的角向渐变背景,从黑色(#000)开始,每 3deg 变为透明,然后再从透明到黑色,以此循环重复。

此时,这样的背景效果可用于创建一种渐变黑色到透明的重复纹理效果:

在这个基础上,我们只需要给这个图形上层,再利用伪元素,叠加一层颜色,就得到了我们想要的边框效果,并且,边框间隙和大小可以简单调整。

完整的代码:

div {
position: relative;
width: 300px;
height: 200px;
border-radius: 20px;
background: repeating-conic-gradient(#000, #000 3deg, transparent 3deg, transparent 6deg);

&::before {
content: "";
position: absolute;
inset: 1px;
background: #eee;
border-radius: 20px;
}
}

效果如下:

乍一看,效果还不错。但是如果仔细观察,会发现有一个致命问题:虚线线段的每一截长度不一致

只有当图形的高宽一致时,线段长度才会一致。高宽比越远离 1,差异则越大:

完整的代码,你可以戳这里:CodePen Demo -- BorderRadius Dashed Border

那有没有办法让虚线长度能够保持一样呢?

可以!我们再换一种渐变,我们改造一下底下的角向渐变,重新利用重复线性渐变:

div {
border-radius: 20px;
background:
repeating-linear-gradient(
-45deg,
#000 0,
#000 7px,
transparent 7px,
transparent 10px
);
}

此时,我们能得到这样一个斜 45° 的重复线性渐变图形:

与上面方法一类似,再通过在这个图形的基础上,在元素中心,叠加多一层纯色遮罩图形,只漏出最外围一圈的图形,带圆角的虚线边框就实现了:

此方法比上面第一种渐变方法更好之处在于,虚线每一条线段的长度是固定的!是不是非常的巧妙?

完整的代码,你可以戳这里:CodePen Demo -- BorderRadius Dashed Border

最佳解决方案:SVG

当然,上面使用 CSS 实现带圆角的虚线边框,还是需要一定的 CSS 功底。

并且,不管是哪个方法,都存在一定的瑕疵。譬如如果希望边框中间不是背景色,而是镂空的,上述两种 CSS 方式都将不再使用。

因此,对于带圆角的虚线边框场景,最佳方式一定是 SVG。(切图也算是吧,但是灵活度太低)

只是很多人看到 SVG 会天然的感到抗拒,或者认为 SVG 不太好掌握。

所以,本文再介绍一个非常有用的开源工具 -- Customize your CSS Border:

通过这个开源工具,我们可以快速生成我们想要的虚线边框效果,并且一键复制可以嵌入到 CSS background 中的 SVG 代码图片格式。

图形的大小、边框的粗细、虚线的线宽与间距,圆角大小统统是可以可视化调整的。

通过一个动图,简单感受一下:

总结一下

本文介绍了 2 种在 CSS 中,不借助切图和 SVG 实现带圆角的虚线边框的方式:

  1. 重复角向渐变叠加遮罩层
  2. 重复线性渐变叠加遮罩层

当然,两种 CSS 方式都存在一定瑕疵,但是对于一些简单场景是能够 Cover 住的。

最后,介绍了借助 SVG 工具 Customize your CSS Border 快速生成带圆角的虚线边框的方式。将 SVG 生成的矢量图像数据直接嵌入到 background URL 中,能够应付几乎所有场景,相对而言是更好的选择。

最后

好了,本文到此结束,希望本文对你有所帮助 :)


作者:Chokcoco
链接:https://juejin.cn/post/7311681326712487999