【我们都爱Paul Hegarty】斯坦福IOS8公开课个人笔记13 Drawing绘制、UIColor颜色、Fonts字体

简介: 上一话介绍了视图绘制的一些基本原理,这一话继续展开。UIBezierPath可以绘制许多有趣的图形。

上一话介绍了视图绘制的一些基本原理,这一话继续展开。UIBezierPath可以绘制许多有趣的图形。


使用不同的构造器,比如roundedRect就是四个角被磨圆了的矩形,或者干脆是椭圆和圆。你甚至可以剪切任意的path,剪切使用addClip方法,在剪切了之后你可以针对剪切的这部分进行操作,例如你正在绘制一个卡片,这个卡片有小小的圆角效果,你可以把卡片绘制在一个矩形里面,然后把它剪切到一个小一点的圆角矩阵里,这样四角就修圆了。这是一个获得圆角卡片最简单的方法。

你也可以进行碰撞检测,它基于绕圈规则。

现在来聊聊颜色的问题。


你可以使用系统给出的标准颜色,比如红色、绿色,也可以自己调色,另外可以把你的颜色设置为一种模式,这样你使用颜色的时候其实是使用了一种图形,这个很酷。。

你可以给视图设置背景颜色,颜色也可以有透明度,透明度(Alpha)使用范围0-1.0代表完全透明,1代表完全不透明。你可以使用方法colorWithAlphaComponent来创建一个半透明的颜色。

如果你在绘制的时候用到了透明度,那么你需要告诉系统,把UIView的opaque属性设置为false。为什么这么做呢?因为带透明度的绘制是非常昂贵的,因为你后面的view会被展示出来,所以系统必须把重叠的视图混合起来绘制,这在图像处理能力上非常昂贵。所以如果不是很有必要不要这么做,如果你在绘制的时候没有把这个属性设置为false,那么你进形半透明绘制将不会成功。

你可以把整个视图都设置成半透明的,因为它自己就有alpha属性。


当带有透明度的视图相互叠加会发生什么?它们会发生混合,子视图数组中的第一个子视图会出现在最后面,剩下的子视图按照顺序出现在前面。你可以完全隐藏一个视图,只需要设置它的hidden属性,这种隐藏视图的做法非常普遍,当某个条件达成时再出现在屏幕上。隐藏的视图不仅不会被绘制,也不会接受任何触控事件,但是它依旧存在于视图的层级关系中,就好像等在那里一样。


通常我们用UILabel在屏幕上绘制文本,如果你想要在你的drawRect上绘制,你用NSAttributedString来完成这个工作,它有很多属性可以被设置


这些属性是字典格式的,它的范围是NSRange格式,不是Range格式,这是古老的格式。

下面来讨论一下字体(Fonts)


字体从IOS7开始,包括IOS8。正确使用非常重要,它们是创建漂亮UI的关键。


那么如何做到字体漂亮呢,我们使用preferredFontForTextStyle,字体样式是类似标题或者正文,就好像我们用word一样,IOS中也可以设置字体的格式,它有一些准备好的格式。用推荐的自己总是好的,它包含了格式和大小,你可以改变它的大小。当然你也可以自己创建一个字体。

也有一些系统默认的字体,比如按钮或者段控制器上的字体,你不会总用默认的吧?用系统推荐的是个更好的方案。

那么如何显示图像呢?我们有个专门显示图片的UIImageView,但是你可能希望把你的图片丢到drawRect里。


一般来说你会以名字来创建一个图片,以便从Images.xcassets里面拿出来。


一旦你有了这个图片,你可以发送一个消息去显示它,这个方法是drawAtPoint,然后系统就会把正常尺寸的图片的左上角放到这个点上。

你也可以用drawInRect这个方法,它会缩放图像在这个长方形区域中。

或者像我们之前说的那样用drawAsPatternInRect,它会平铺直到铺满这个区域。


那么当你的边界发生变化怎么办,比如你旋转了手机,由高瘦变成了矮胖,你可能希望再调用一次drawRect,但是这是做不到的,你的图像会被拉扁,所以一般来说得不到你想要额结果。但是这是默认的做法,拉伸图像以获得更好的性能。你可以自己来控制边界改变时的处理对策。使用视图中的contentMode就能做到。一种策略是不改变图片,只是让你的图片移动到新边界的各个方向而已。

另外一些做法是以原图像的宽高比例来缩放图片。

你也可以用你最想用的Redraw。

目录
相关文章
|
前端开发 iOS开发
【我们都爱Paul Hegarty】斯坦福IOS8公开课个人笔记3 Xcode、Auto Layout及MVC
   继续上一话中的计算器Demo,上一话讲到类必须被初始化,类中的属性也必须被初始化,所以你不能只声明而不给它一个处置,那么问题来了,我们从storyboard中拖拽的@IBOutlet为什么只有声明而不需要初始化呢,这是因为它的类型依旧是一个optional,在你初始化之前已经被赋值为nil了,这也就是为什么你不需要再初始化它的原因。
943 13
|
前端开发 API
【我们都爱Paul Hegarty】斯坦福IOS8公开课个人笔记4 MVC enum Tuple Dictionary
 回顾一下我们上一话中的代码: @IBAction func operate(sender: UIButton) { let operation = sender.
868 0
|
Unix iOS开发
【我们都爱Paul Hegarty】斯坦福IOS8公开课个人笔记1 IOS8概述
  首先感谢网易公开课和SwiftV课堂的朋友们辛苦翻译,这个系列是我学习斯坦福IOS8公开课的个人心得体会和笔记,希望能给大家带来启发。
1130 0
|
12月前
|
开发框架 前端开发 Android开发
安卓与iOS开发中的跨平台策略
在移动应用开发的战场上,安卓和iOS两大阵营各据一方。随着技术的演进,跨平台开发框架成为开发者的新宠,旨在实现一次编码、多平台部署的梦想。本文将探讨跨平台开发的优势与挑战,并分享实用的开发技巧,帮助开发者在安卓和iOS的世界中游刃有余。
|
10月前
|
iOS开发 开发者
uniapp开发ios打包Error code = -5000 Error message: Error: certificate file(p12) import failed!报错问题如何解决
uniapp开发ios打包Error code = -5000 Error message: Error: certificate file(p12) import failed!报错问题如何解决
600 67
uniapp开发ios打包Error code = -5000 Error message: Error: certificate file(p12) import failed!报错问题如何解决
|
9月前
|
JavaScript 搜索推荐 Android开发
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
356 8
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
|
11月前
|
iOS开发 开发者 MacOS
深入探索iOS开发中的SwiftUI框架
【10月更文挑战第21天】 本文将带领读者深入了解Apple最新推出的SwiftUI框架,这一革命性的用户界面构建工具为iOS开发者提供了一种声明式、高效且直观的方式来创建复杂的用户界面。通过分析SwiftUI的核心概念、主要特性以及在实际项目中的应用示例,我们将展示如何利用SwiftUI简化UI代码,提高开发效率,并保持应用程序的高性能和响应性。无论你是iOS开发的新手还是有经验的开发者,本文都将为你提供宝贵的见解和实用的指导。
321 66
|
9月前
|
人工智能 程序员 API
iOS|记一名 iOS 开发新手的前两次 App 审核经历
啥,这玩意也有新手保护期?
231 0
|
11月前
|
存储 监控 API
app开发之安卓Android+苹果ios打包所有权限对应解释列表【长期更新】-以及默认打包自动添加权限列表和简化后的基本打包权限列表以uniapp为例-优雅草央千澈
app开发之安卓Android+苹果ios打包所有权限对应解释列表【长期更新】-以及默认打包自动添加权限列表和简化后的基本打包权限列表以uniapp为例-优雅草央千澈
1046 11
|
11月前
|
开发框架 Android开发 iOS开发
安卓与iOS开发中的跨平台策略:一次编码,多平台部署
在移动应用开发的广阔天地中,安卓和iOS两大阵营各占一方。随着技术的发展,跨平台开发框架应运而生,它们承诺着“一次编码,到处运行”的便捷。本文将深入探讨跨平台开发的现状、挑战以及未来趋势,同时通过代码示例揭示跨平台工具的实际运用。
336 3

热门文章

最新文章