Xian Rong

Stay hungry Stay foolish


  • 首页

  • 归档

  • 分类

  • 标签

  • 关于

拥抱Swift

发表于 2017-09-27 | 分类于 Swift

随着秋季发布会过后Swift4也正式放出,Switf4已趋向于稳健,为Swift3提供了源码兼容。无论是旧OC项目慢慢迁移到Swift4还是新项目直接使用Swift4,时机已然成熟,让我们拥抱Swift吧。Swift的灵活与优雅真让人神往。

Swift 既是一⻔高层级语言,又是一⻔低层级语言。 你可以在 Swift 中用 map 或者 reduce 来 写出十分类似于 Ruby 和 Python 的代码,你也可以很容易地创建自己的高阶函数。Swift 让你有能力快速完成代码编写,并将它们直接编译为原生的二进制可执行文件,这使得性能上可以与C 代码编写的程序相媲美。
我们可以兼顾高低两个层级。将一个数组通过闭包表 达式映射到另一个数组所编译得到的汇编码,与直接对一块连续内存进行循环所得到的结果是一致的。

阅读全文 »

OC与Swift混合编程

发表于 2017-09-26 | 分类于 Swift

OC中使用Swift

1、设置DefinesModule为Yes
Image text

阅读全文 »

Swift第三方框架

发表于 2017-09-15 | 分类于 Swift

// 图片加载
pod ‘Kingfisher’

// 函数式链式编程
pod ‘RxSwift’
pod ‘RxCocoa’
pod ‘RxDataSources’

阅读全文 »

ReactiveSwift示例

发表于 2017-09-13 | 分类于 Swift

1、UIButton监听点击

1
2
3
btn.reactive.controlEvents(.touchUpInside).observeValues { (btn) in
print("点到我了")
}

阅读全文 »

直播试炼

发表于 2017-09-10 | 分类于 OC

直播APP主要实现的流程

1.采集、2.滤镜处理、3.编码、4.推流、5.CDN分发、6.拉流、7.解码、8.播放、9.聊天互动

阅读全文 »

iOS项目架构概述

发表于 2017-09-10 | 分类于 Swift

基于业务需求的架构,不要为了架构而架构

MVC

MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写
是 苹果官方文档 推荐使用的一个设计模式,经典中的经典。
看懂斯坦福公开课上的这张图就够了
Image text

阅读全文 »

直播小总结

发表于 2017-09-08 | 分类于 OC

今年接触了一个秀场直播项目,在此做一下简单小总结。

一、功能介绍

1、直播列表:关注、热门、明星、同城等等
2、排行榜:贡献榜、财富榜
3、商城:商品展示、购物车,订单地址管理、订单状态、支付宝微信支付
4、直播端:录制、推流、美颜、背景音乐、分享,主播对观众的禁言、拉黑、设置管理员等
5、观看端:单聊、聊天室、私聊、@TA,点亮爱心,举报、个人名片、个人主页等
6、礼物:普通礼物、特效礼物、实体礼物、充值、提现、内购等
7、用户逻辑:手机账号注册登陆、第三方账号登录、个人信息编辑、设置管理、直播回看、关注列表、粉丝列表、我的收益、我的礼物、等级、认证等
8、管理后台:审核、禁播等等

阅读全文 »

UIBezierPath

发表于 2017-08-19 | 分类于 Swift

使用UIBezierPath类可以创建基于矢量的路径,这个类在UIKit中。此类是Core Graphics框架关于path的一个封装。使用此类可以定义简单的形状,如椭圆或者矩形,或者有多个直线和曲线段组成的形状。
Image text

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
class BezierPathView: UIView {
override func draw(_ rect: CGRect) {
// 画矩形
let bp = UIBezierPath(rect:CGRect(x: 10, y: 30, width: 30, height: 50))
UIColor.green.set()
bp.fill()
// 画椭圆(如果宽高相等则为圆)
let ovel = UIBezierPath(ovalIn: CGRect(x: 50, y: 30, width: 60, height: 40))
UIColor.red.set()
ovel.fill()
// 画圆角的矩形(圆角值为8)
let roundeRect1 = UIBezierPath(roundedRect: CGRect(x: 120, y: 30, width: 60, height: 40), cornerRadius: 8)
UIColor.orange.set()
roundeRect1.fill()
// 画矩形,指定某个或多个角设置圆角
let roundeRect2 = UIBezierPath(roundedRect: CGRect(x: 190, y: 30, width: 60, height: 40), byRoundingCorners: [.topLeft,.bottomRight], cornerRadii: CGSize(width: 20, height: 60))
UIColor.blue.set()
roundeRect2.fill()
// 画圆弧1
let arcPath = UIBezierPath(arcCenter: CGPoint(x: 50, y: 120), radius: 40, startAngle:2 * .pi, endAngle: .pi/2, clockwise: true)
UIColor.brown.set()
arcPath.stroke()
// 画圆弧2
let arcPath2 = UIBezierPath()
arcPath2.addArc(withCenter: CGPoint(x: 250, y: 120), radius: 40, startAngle: .pi, endAngle: .pi * 2, clockwise: false)
arcPath2.stroke()
// 二阶贝赛尔曲线(起点、终点、一个控制点)
let twoPath = UIBezierPath()
twoPath.move(to: CGPoint(x: 20, y: 250))
twoPath.addQuadCurve(to: CGPoint(x: 100, y: 250), controlPoint: CGPoint(x: 80, y: 180))
let twoPath1 = UIBezierPath()
twoPath1.move(to: CGPoint(x: 150, y: 250))
twoPath1.addQuadCurve(to: CGPoint(x: 230, y: 250), controlPoint: CGPoint(x: 190, y: 180))
twoPath1.append(twoPath) //拼接路径
UIColor.black.set()
twoPath1.lineWidth = 2.0
twoPath1.lineCapStyle = .square
twoPath1.lineJoinStyle = .round
twoPath1.stroke()
// 三阶贝赛尔曲线(起点、终点、两个控制点)
let threePath = UIBezierPath()
threePath.move(to: CGPoint(x: 20, y: 350))
threePath.addCurve(to: CGPoint(x: 300, y: 350), controlPoint1: CGPoint(x: 100, y: 250), controlPoint2: CGPoint(x: 180, y: 450))
UIColor.orange.set()
threePath.stroke()
}
}

圆弧起始点
Image text
二阶贝塞尔曲线示意图
Image text
三阶贝塞尔曲线示意图
Image text

Quartz2D

发表于 2017-08-18 | 分类于 OC

Quartz 2D是一个二维图形绘制引擎,我们可以使用Quartz 2D 实现基本路径的绘制、透明度、描影、绘制阴影、透明层、颜色管理、反锯齿、PDF文档生成和PDF元数据访问。在需要的时候,Quartz 2D还可以借助图形硬件的功能。

阅读全文 »

runtime

发表于 2017-08-17 | 分类于 OC

runtime是一套底层的C语言API(包含很多强大实用的C语言数据类型、C语言函数)
运行时最主要的消息机制,是使用c语言给对象发送消息,对象接收到消息后, 找到匹配的方法执行。

常见的函数、头文件

1
2
3
4
5
6
#import <objc/runtime.h> : 成员变量、类、方法
Ivar * class_copyIvarList : 获得某个类内部的所有成员变量
Method * class_copyMethodList : 获得某个类内部的所有方法
Method class_getInstanceMethod : 获得某个实例方法
Method class_getClassMethod : 获得某个类方法
method_exchangeImplementations : 交换2个方法的具体实现

阅读全文 »
1…345
XianRong

XianRong

yhtyhrt66@gmail.com

45 日志
6 分类
6 标签
© 2018 XianRong
由 Hexo 强力驱动
主题 - NexT.Pisces