Podfile
中增加
或删除
某个pod后, 也是使用这个命令. 而不是pod update
.pod install
命令, 下载并安装新的pod时, 它会为Podfile.lock
文件中的每个pod写入已安装的版本. 此文件跟踪每个pod的已安装版本并锁定这些版本(.lock命名因此而来).pod install
,它只解析Podfile.lock
中尚未列在其中的pod的依赖库.Podfile.lock
中列出的pod, Podfile.lock
不会尝试检查是否有更新的版本.Podfile.lock
中列出的pod, 会搜索与Podfile
(如中所述pod ‘MyPod’, ‘~>1.2’)匹配的版本或最新的版本.注: 第一次运行pod install
的时候, .xcworkspace项目
和Pods目录
还不存在, pod install
命令也会创建.xcworkspace
和Pods目录
, 但这是pod install
命令的顺带作用
,而不是它的主要作用
.
当运行pod outdated
时, CocoaPods将列出所有比Podfile.lock
(每个pod当前安装的版本)中, 已经列出的版本更新的pod版本. 这意味着如果你在这些pod上运行pod update PODNAME
, 它将会把指定的pod更新到最新版本.
当运行pod update PODNAME
时, CocoaPods将尝试查找PODNAME
更新的pod版本, 会忽略掉Podfile.lock
中已经存在的版本.
如果直接运行pod update
, 没有指定PODNAME
, CocoaPods会把Podfile中所有的pod都更新到最新版本.(如果已经是最新版本了, 则不更新)
使用pod update PODNAME
, 将只能更新特定的pod(检查是否存在新版本并相应地更新pod). 相反, pod install不会尝试更新已安装的pod的版本.
当向Podfile中添加一个pod时, 应该运行pod install
, 而不是用pod update
来安装这个新pod.
只有在想要更新特定pod(或所有的pod)的版本时才会使用pod update
.
有时候可能你不想提交Pods目录到源代码管理中. 但是在多人开发的情况下, 一定要提交Podfile.lock
这个文件, 因为这个文件里面记录了你的Podfile中所有pod的版本信息. 为避免你的Podfile中的pod版本和别人的Podfile中的pod发生版本不一样的情况, 而导致出现函数找不到或者其他的错误.
user1创建了一个项目, 并且想用A
, B
, C
这3个pod库, 这个时候用pod install
安装了这些pod库, 并且假设这3个库的版本号都是1.0.0
, 这些版本号等信息会记录在Podfile.lock
文件中.
根据项目的进度需求, 添加了D
这个pod库到项目中, 这个时候应该使用pod install
去安装D
这个库到项目中, 即使在添加D
这个库之前, B
的版本被维护者更新到了1.1.0
, 使用pod install
也只会安装D
这个库到项目中, 而不会去帮你更新B
的版本. 从而不会出现因为B
的版本更新后, 假如某些函数过期了, 或者某些函数被移除了, 而导致你被迫需要修改项目代码.
假设团队中新增加了一位基友user2, 他克隆了项目, 并且pod install
. (前提是你没有把Pods目录
添加到源代码管理中), 如果你将Podfile.lock
提交到了版本控制. 那么基友安装后的pod会和你的一模一样, 不会出现他的pod版本比你的高. 即便现在C
的版本更新到了1.2.0
, 基友安装的也是1.0.0
版本. 因为在Podfile.lock
中记录的pod C
就是1.0.0
版本.
后来, user1想要检查下是否有更新pod的版本. 运行pod outdated
, 会告诉你pod B
有一个新1.1.0
版本, pod C
已经是1.2.0
版本. user1决定他想要更新pod B
, 但不更新pod C
. 因此, 他会运行pod update B
, 将B
从1.0.0
版本更新到版本1.1.0
(并相应的更新Podfile.lock
), 但会将pod C
保留在版本中1.0.0
(不会将其更新为1.2.0
).
有些人可能会认为, 通过在Podfile
中指定pod确切的版本, 像pod 'A', '1.0.0'
, 就足以保证每一个人和其他人都会有相同的版本. 然后他们甚至可以使用pod update
, 即使只是添加一个新的pod, 认为它永远不会有更新其他pod版本的风险, 因为它们在Podfile中被固定到了一个特定的版本.
但事实上, 这还不足以保证我们上面场景中的user1和user2, 始终获得所有pod的完全相同的版本. 举一个典型的例子, 如果pod A
中有对pod A2
的依赖, 在A.podspecas
中声明dependency 'A2', '~> 3.0'
. 在这种情况下,pod 'A', '1.0.0'
在你的Podfile中使用的时候, 确实会强制user1和user2始终使用A 1.0.0 的pod版本
.
但是: user1最终可能获取到的A2版本是pod 3.4
(因为那时A2是最新版本), 当user2在以后加入项目时运行pod install
, 他可能会在A2的版本中获得pod 3.5
(因为维护者A2可能在此期间发布了新版本).
这就是为什么为了确保在每个团队成员使用的每台电脑上, 所有相同的pod版本的唯一方法, 是使用Podfile.lock
和正确使用pod install
和pod update
的原因.
是否将Pods文件夹添加到源代码管理中都取决于你,因为工作流程因项目而异. 我们建议您将Pods目录保留在源代码管理下, 不要将其添加到您的.gitignore. 但最终这个决定取决于你:
无论你是否在忽略Pods目录, Podfile并Podfile.lock应始终版本控制下保持.
本文内容来源:
https://guides.cocoapods.org/using/pod-install-vs-update.html
https://guides.cocoapods.org/using/using-cocoapods.html
曾经尝试过的部署方式思路, 有几种.
1.通过在服务器用git的钩子进行部署, 在服务器上, 会有两个用户, 一个root用户,
一个git用户, 但是如果不用root权限的话, git权限的用户找不到编译环境, 如果强行把编译环境修改到git权限的用户,那么root用户又无法编译了. 自动编译不能用, 所以只能手动编译和启动. 在无法找到更完美的部署方式前, 一直用的这个.
我目前的操作步骤, 在服务器上创建一个git文件夹, 然后通过钩子, 监听到push后, 打包该文件, 拷贝到一个编译目录, (直接在原来的目录上进行编译, 也是可以的), 然后解压, 解压后手动通过ssh进行编译和启动.
2.通过官方支持的docker进行部署, 但是在本地docker环境里面进行编译的时候, 始终无法完成编译, 说缺少openssl的一个头文件,但是在本地编译是正常的.在两台系统版本号不同的电脑上, 都尝试过, 结果一样, 所以不知道是哪里错了…很无奈…
3.这一种方式, 也是目前我个人发现的最完美的方式了.
不多BB, 看思路图.
让服务器ssh界面化, 也是自动化部署的关键, 你可以采取其他的监听webhook的方式, 也可以达到同样目的
在使用面板的时候, 设置好代码的端口后(比如8080), 记得在这个里面对你的端口进行放行, 否则无法访问.
1.在代码托管平台创建代码仓库.
2.在服务器创建你存放Perfect代码的目录, 对代码平台的代码仓库进行git clone
3.在宝塔面板上安装webhook
注: 通过宝塔面板可以访问操作文件和文件夹, 并且面板自带了很多有用的工具, nginx, 数据库, 等.我觉得非常方便友好, 并且这个东西是免费的, 一键安装, 强烈建议使用. 具体有哪些功能你可以去官网看, 反正点一下又不会怀孕不是. http://bt.cn
4.安装完后添加Hook.名称随便写.
脚本内容如下(你也可以根据你自己的情况进行精简), 导入编译环境的教程地址 http://www.jianshu.com/p/538b685b6a62
5.把添加后的面板请求地址和密匙添加到代码仓库的webhooks(我是用push事件来做的.你也可以用其他方式.比如tag)
6.添加成功后, 就会像这样
7.都设置成功后, 你可以在你的面板上测试面板的webhook操作是否正确, 阿里云代码托管平台也可以测试发起请求的操作是否正确. TEST HOOK
8.在本地拉取阿里云代码仓库的代码, 进行代码提交, 触发以上一系列的webhook.
简洁思路: 如果你设置的是push事件, 当阿里云代码托管收到你的代码push后, 会去请求服务器的webhook, 服务器的webhook收到请求后, 会在服务器进行1进入代码目录, 2拉取阿里云的代码, 3编译并且启动的操作.感受自动化部署的愉悦吧!
首先, 根据Perfect框架的官网文档, 快速开启本地服务器 http://perfect.org/docs/gettingStarted_zh_CN.html
后端开发, 必不可少的便是数据库, Perfect框架支持好几种数据库, 我自己选用的是MySql数据库, 以下所有教程都是基于MySql数据库进行展开的.
教程所有内容主要是以在本地和服务器部署各种环境为主, 避免浪费不必要的时间在部署环境上.
打开终端, 安装mysql(请勿使用dmg的方式安装mysql, 经我测试, 发现会碰到一些麻烦的问题)
|
|
如果你也需要采用这种暴力方法, 请继续看, 如果你已经顺利安装了, 直接跳过卸载重装的部分.
|
|
进入Homebrew官网 https://brew.sh/index_zh-cn.html, 复制这里的命令到终端安装即可(安装命令可能会变, 所以请自行前往复制)
安装完成后, 手动启动mysql
|
|
打开数据库
|
|
设置mysql密码
|
|
更新用户名和密码, 用户名建议用root, 后面的教程都会以此为例子.
设置完密码后刷新权限
|
|
输入 \q
退出数据库
重新登录数据库, 尝试用新密码进入, 如果成功, 退出数据库, 进行接下来的步骤.
建议在网上找一个数据库软件, 更加直观的查看数据和调试.
接下来回到本地服务器项目代码这边.
打开Package.swift
导入.Package(url:"https://github.com/PerfectlySoft/Perfect-MySQL.git", majorVersion: 3),
注意最后面有个逗号.
在终端执行swift build
和swift package generate-xcodeproj
, 用xcode打开项目.打开main.swift
|
|
除了密码需要改成你自己设置的密码, 其他的照搬
加入以下函数并调用, 在这个函数声明之后, 随处调用即可
|
|
运行项目, 控制台打印
["information_schema", "mysql", "performance_schema", "sys"]
表示数据库已经用代码连接成功.
]]>当你按control + c
退出vps上的swift项目运行的时候, 其实你的项目已经停止了, 用服务器ip+端口号访问, 已经无法响应了.
这个时候就需要用supervisor
来让项目一直在后台运行, 这样, 你编写的api才能一直能访问.
打开终端连接上服务器.创建找一个文件夹存放你的脚本.我存放在Code
文件夹, 并且创建了一个文件, 名字叫script.sh
的文件.
/root/Code/script.sh
, 也就是你需要supervisor帮你执行这个脚本.并且一直后台运行.
/root/Code
的script.sh
里面, 编写着路径地址和执行命令.
|
|
输入sudo apt-get install supervisor
安装supervisor.
安装完成后, 进入cd /etc/supervisor/conf.d
, 创建并编辑 vim swiftServer.conf
, swiftServer
是我的文件名和program名, 你也可以用你喜欢的.
在文件中粘贴以下代码,
|
|
更多的supervisor配置信息请自行查阅, 这里只保证项目能正常启动起来.
输入supervisorctl reload
让你刚刚的配置生效.
输入supervisorctl start swiftServer
启动并后台运行
再次在网页中打开服务器ip:8181
, Hello, world!
时刻与你同在. ^.^
打开终端, 链接服务器, 输入sudo apt-get install mysql-server mysql-client
安装MySql数据库. 安装过程中会叫你输入两次密码,
安装完成后, 输入mysql -u root -p
, 输入刚刚的密码, 进入数据库.
有时候需要远程管理服务器上的数据库, 就要配置远程访问.
输入\q
退出数据库.cd /etc/mysql/mysql.conf.d/
进入文件夹, vi mysqld.cnf
打开配置文件, 把bind-address = 127.0.0.1
前面加个#
给注释了.
然后重新mysql -u root -p
进入数据库, 执行GRANT ALL PRIVILEGES ON *.* TO '<user>'@'%' IDENTIFIED BY '<password>' WITH GRANT OPTION;
, <user>
换成你想设置的用户名, <password>
换成密码, ''不能少了
, 然后再执行FLUSH PRIVILEGES
刷新权限. 最后重启一下数据库.
mac和ubuntu的数据库命令是不一样的
|
|
打开电脑上的的数据库软件, 输入你的服务器ip地址, 端口号默认3306, 输入刚刚设置的用户名和密码.连接.
现在, 你已经用本地数据库软件成功连接服务器上的数据库了.
]]>一直想学习一门后端语言, 能够写一些Api给自己的App使用. 考虑过js配合node.js, 后来放弃了.
最开始看到swift相关的新闻, 已经知道swift能够编写服务器, 但是一直没有怎么关注, 直到那天我简单看了一下swift的几个服务器框架, 才发现今日的swift服务器框架, 早已足够满足我的现有需求了.
为什么要选择Perfect这个框架, 是因为他星星最多, 中英文文档. 非常友好.
https://github.com/perfectlySoft/Perfect
https://github.com/vapor/Vapor
https://github.com/ibm-swift/kitura
当你掌握了以上的姿势后, 你就可以给自己编写接口了, 是不是很赤鸡?
其实Perfect有自己的部署工具https://perfect.org/zh/assistant/, 但是仅限于亚马逊云EC2服务器部署
和Google App Engine 谷歌应用引擎部署
, 鉴于自己买非以上两种的vps
比较便宜, 而且自己写点接口, 不需要这么贵.
购买vps, 安装Ubuntu, 请安装以下3种os中的任意一种. 我购买的vps上, 最新并且最兼容swift的是Ubuntu16.04 64位的.
打开终端, 输入 ssh root@vps的ip地址
, 输入vps的密码(vps自动生成的), 比如 ssh root@133.84.12.61
第一次连接会出现一个输入yes和no的询问, 输入yes回车继续
当终端的开头变的和之前不一样的时候, 就是连接成功了, 比如我的, root@swift:~#
输入以下命令安装必须的库
|
|
现在, 你已经用终端和vps连接成功了, 接下来创建两个文件夹, 分别存放你的swift代码和swift工具的编译环境
查看当前文件夹
|
|
分别输入以下命令, 创建Code文件夹和Swift文件夹, 前者用来存放代码, 后者用来存放swift的编译环境(文件夹名字你可以自己取)
|
|
输入 ls -a
继续查看文件夹
cd Swfit
进入文件夹, 输入 sudo apt-get install clang libicu-dev
安装必要的工具, 出现问你是否继续的, 直接输入 y
继续
安装完成
进入swift官方网站, 获取下载地址, https://swift.org/download/
我选择的是Releases版本, Swift 4.0, Ubuntu 16.04版本, 版本和你的vps系统版本对应即可. 选中Ubuntu 16.04
, 右键获取链接地址, https://swift.org/builds/swift-4.0-release/ubuntu1604/swift-4.0-RELEASE/swift-4.0-RELEASE-ubuntu16.04.tar.gz
记录下来.
在对应的Ubuntu 16.04
下面, 选中Signature
, 继续获取Signature
的地址, 继续记录下来.
第一个获取的是swift编译环境的地址, 第二个获取的是对应编译环境的签名地址.
在终端中输入 wget 刚刚获取的swift编译环境的地址
wget https://swift.org/builds/swift-4.0-release/ubuntu1604/swift-4.0-RELEASE/swift-4.0-RELEASE-ubuntu16.04.tar.gz
在终端中输入 wget 签名地址
等文件都下载完成后, 继续输入,
|
|
输入ls
查看当前文件夹, 文件夹中有两个, 一个是swift编译工具的压缩包状态, 一个是签名文件.
从终端中复制签名文件的名字, swift-4.0-RELEASE-ubuntu16.04.tar.gz.sig
在前面加上 gpg --verify
, 变成 gpg --verify swift-4.0-RELEASE-ubuntu16.04.tar.gz.sig
, 进行验证, 出现和图上一样的, 表示没问题.
输入 tar xzf 包名
, 进行解压.
再次输入ls
, 会发现多了一个文件夹.
进入刚刚解压出来的文件夹里面, 再进入usr
, 进入bin
, 输入pwd
, 获取全路径, 记录下来.
输入cd ~
进入根目录, 输入ls -a
, 输入vi .profile
打开文件
在当前文件中加入export PATH=刚刚获取的全路径:"${PATH}"
, 不要加到最后面一句命令的后面了. 否则就不能正常生效.把刚刚加入进去的那句命令复制(后面要用)
退出并保存.profile
文件, 粘贴刚刚赋值的命令, 执行.
输入swift --version
, 出现正确版本号, swift编译环境搭建完毕.
继续查看当前文件夹, 进入Code
文件夹, 按照之前在本地快速搭建服务器的方法, 再克隆并运行一次.swift build
的时候, 如果出现和图中一样的error, error while loading shared libraries: libcurl.so.4: cannot open shared object file: No such file or directory
, 输入sudo apt-get install libcurl3
, 安装libcurl3
, 继续后续步骤, 编译成功后, 使用服务器地址:8181
访问, 网页中出现Hello, world!
, 也就美滋滋了~
文章以阿里云的.com域名为例子, 你也可以购买其他后缀的域名.
1.打开阿里云https://wanwang.aliyun.com/, 输入你想搜索的域名, 点击查域名
.
2.选好域名, 域名的后缀, 加入清单, 确认信息, 然后去结算.
3.确定域名, 年限, 持有者为个人, 创建信息模板. 立即购买.
4.结算完成后, 点击右上角的控制台, 为域名进行解析.
1.点击域名, 域名列表, 找到域名进行解析.
2.添加3条
解析记录.初次解析可能会有点慢.
记录类型, 主机记录, 记录值, 是需要我们填写的, 其他的不要管.
按我下面的指示填写, 除了pengpengtest.github.io
中的pengpengtest
需要换成你的github用户名
, 其他的照着填.
|
|
1.先进入桌面, cd 你的hexo本地目录
, cd source
, touch CNAME
创建CNAME文件, open CNAME
打开并编辑.
2.填入域名, 不用加任何http://或者www, 填写完成后保存退出.
3.输入../
回到你的hexo本地目录. hexo g -d
重新生成部署.
4.然后访问域名, 比如我的, swift520.com
, 成功!~
Git(安装了Xcode就会自带, 所以不再赘述)
Node.js
可以用很多种方式安装Node.js, 但是为了必免因缺少各种环境而安装失败, 这里推荐直接下载安装包安装.
https://nodejs.org/zh-cn/download/
打开终端, 输入npm install -g hexo-cli
进行安装.
Hexo只是帮你生成静态网页博客的工具, 你可以在本地进行调试. 如果你想让别人也能看到. 你必须上传到github或者自己的vps服务器. 别急, 接下来我都会为你讲解如何操作.
1.为了测试方便, 我把我的本地环境搭建在桌面的某个文件夹. 你也可以存放到你想存放的文件夹去.
注: 如果你想存放到别的地方, 那么你需要打开想存放的地方, 并且cd进去, 拖拽目标文件夹到终端, 既可获取目标路径, 拷贝路径, 然后cd进去既可.
2.打开终端, 输入cd Desktop
到桌面.
3.我准备把环境搭建在桌面的peng
文件夹中, 所以我继续在终端输入mkdir peng
创建名叫peng的文件夹.
4.cd peng
进入叫peng
的文件夹中.
5.输入hexo init
进行初始化.
6.输入npm install
进行安装, 过一会儿会卡在> node scripts/install.js
这里, 你继续等待既可, 当出现如下图片, 安装成功.
7.输入npm install hexo-deployer-git --save
安装简化命令的插件.
8.输入hexo s
, 并且拷贝地址http://0.0.0.0:4000/
到浏览器, 进行本地预览.
9.对, 就是这么简单, 本地环境搭建成功. 按control + c
退出预览.不要关掉终端, 待会所有的操作, 都要在这个叫peng的文件夹中操作
10.接下来我们需要让本地环境生成静态网页, 并且上传到github中.
1.打开github.com并且登录你的账号, 账号必须已经通过了邮箱认证点击 Verify email address 链接验证邮箱
, 否则可能导致部署失败出现404. 在你注册账号的时候, github就会发送邮件到你的邮箱.
2.登录账号后, 点击右上角的github头像, 点击Your profile.
3.然后将浏览器地址栏,红框框起来的github用户名
记录下来.
4.点击右上角的+
号按钮, 创建新的仓库.
5.仓库名必须是你的用户名.github.io
组成, 其他的都可以不用管, 填完仓库名后, 直接Create repository既可.
6.点击按钮复制并且记录仓库地址
, 待会要用到.
7.在终端输入open _config.yml
, 打开hexo配置文件, 滑动到最下面, 找到deploy
, repository
和branch
这两个默认没有, 你按我的格式粘贴既可.
type后面写git, repository后面是你刚刚复制并记录的仓库地址, branch直接写master既可, 然后保存并关闭
|
|
8.输入hexo g -d
, 重新生成并部署网页到github仓库.期间会让你输入账号和密码.账号和密码每输入完一项回车既可.密码是不会显式出现的.
9.出现下图,表示部署博客到github仓库成功.打开github仓库, 里面已经有了文件了.
10.接下来在浏览器输入你的用户名.github.io
打开.博客已成功部署到github仓库!别人也可以通过这个地址你的用户名.github.io
来访问你的博客了!
1.在终端输入hexo n "文章名"
, 创建文章.并且用open xxxxx
打开它. 写入文章内容.
2.分别输入hexo g
(生成)和hexo d
(部署)后, 或者直接hexo g -d
后, 再打开你的用户名.github.io
. 新的文章也发布成功了.(有时候可能需要清除一下浏览器缓存才行)
hexo g
和hexo d
等效于hexo g -d
.1.在搜索引擎搜索 hexo theme
既可.
2.在这里, 我们用iissnan/hexo-theme-next
主题来演示.首先进入你想用的主题github仓库, 拷贝仓库地址.
3.在终端输入git clone 主题仓库地址 theme/主题名字
.接下来一顿下载.
git clone https://github.com/iissnan/hexo-theme-next.git themes/iissnan
4.下载完成后, 输入open _config.yml
找到theme
,修改hexo配置, 告诉hexo你想用的主题名字.
5.接下来hexo clean
清理缓存, hexo g -d
重新生成博客并且部署. 打开你的用户名.github.io
, 更换主题成功!(有时候可能需要清除一下浏览器缓存才行, 浏览器缓存就是这么麻烦, 你懂的)
6.以后想更换主题, 按这个步骤来就行了.清理缓存并不会删除你的文章, 可以放心操作.
如果需要用github当图床, 可以把图片放到本地hexo目录/source/
文件夹里面, 我是新建了一个images
来存放的. 需要先部署和生成, 把图片放到github上, 才能通过链接找到.
如果是直接放在source
目录下, 那么你的图片链接地址就是http://域名/图片名.图片后缀
.
比如:http://zedxpp.com/favicon.ico
这个小图标, 我是做了https转发, 所以实际浏览器上显示的链接不一样(你可以直接拷贝我给的链接查看)
如果是放在二级目录下, 就需要加上目录名称, 比如我放在images
下的这个头像, 那么就是http://zedxpp.com/images/icon.jpg
重点: 所有hexo xxx
的操作, 必须用终端cd 你本地环境目录
下, 然后才能用hexo xxx
操作.
有时候明明已经新建, 修改了文章, 或者改变了博客或主题的各种配置, 并且生成部署了, 还是不能显示, 可能是github还没缓存好, 稍微等半分钟的样子, 再看看. 不行就清理浏览器缓存. 还是不行, 就hexo clean
清理本地缓存. 再重新生成和部署.
|
|
|
|
使用hexo博客, 你需要会markdown
语法, 才能编写更漂亮排版的文章.自行搜索markdown 语法
关键字查找.
并且你需要一个能识别并编写markdown
语法的编辑器. 自行搜索markdown 编辑器
关键字查找. 各种免费的, 收费的.
当你在终端输入vi xxx
或者vim xxx
的后.会进入下图的状态, 请多注意左下角, 每一个步骤左下角都会有变化.
1.未编辑状态
2.按键盘上的i
进入编辑状态, 然后输入内容
输入前
输入后
3.按esc
退出编辑状态
4.输入:wq
保存并退出
5.保存并退出后
本文内容均来自, 我自己学习过程中的整理, Quartz2D介绍部分来自 Rynn的博客 具体更详细的Quartz2D介绍可以点击链接查看, 本博文主要以实战代码为主.
|
|
- (void)drawRect:(CGRect)rect
中的rect参数, 可以获取到当前View的CGRect- (void)drawRect:(CGRect)rect
的方法中愉快的玩耍了.- (void)drawRect:(CGRect)rect
方法, 我们只需要打开就好.
|
|
|
|
CGContextAddPath(ctx, path.CGPath);
因为这个函数需要接收的参数是CGPathRef
, 而我们创建的并不是, 所以我们需要调用UIBezierPath
类的- (CGPathRef)CGPath
方法, 把 UIBezierPath
类型转换成CGPathRef
.想要实现画两条或多条直线的方法, 有两种方式.
第一种
|
|
|
|
自己的路径, 自己的路径对象进行管理
, 从代码行数角度来讲, 当然是第一种好.平行或无连接关系
的线段.
|
|
两端的样式
和连接处的样式
的参数是枚举, 剩下的样式请自行尝试.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
M_PI
表示180°, M_PI_2
表示90°, M_PI_4
表示45°.(具体可以跳到头文件进行查看)百度知道
的答案弧度 = (角度 / 180) PI
PI就是“派”
比如180度角,转换之后的弧度就是PI,45度的话是四分之一PI。
反过来也一样,角度 = 弧度 / PI 180
|
|
UIBezierPath
类为我们提供了更加便捷的方法, 所以在添加第二根线, 圆心到圆弧起始点位置
, 我们可以直接调用[path closePath]
的对象方法, 这样也减少了位置的计算.
|
|
setStroke
方法来设置颜色.
|
|
closePath
stroke
方法, 而是调用fill
方法UIBezierPath
并没有帮我们封装类似的方法, 所以我们还是需要使用CoreGraphics
框架中的C语言函数来实现.
|
|
注: 图中所用的Xcode版本为Xcode7.3
按下图顺序进行导入SQLite库
导入成功后, 新建一个Header File文件进行桥接
如果没有提示, 就按图中头文件名手动敲入
打开Build Settings, 输入bri关键字进行搜索, 找到图中我选中的 Objective-C Bridging Header
这一行, 点击此行右边空白的地方, 弹出输入框, 从左边的文件栏选中文件你的桥接文件拽入输入框, 然后删除前面多余的路径地址
然后编译一下, 成功就表示路径地址设置对了
随便回到哪个控制器, 能够敲出sqlite的方法, 并且编译成功, 就表示导入成功了
移除sqlite库文件的时候, 千万不要选择移除到废纸篓, 不然不小心清空废纸篓了, 那么你的库文件也被删掉了, 点击图中箭头指示的移除引用即可