- Q:在做opengl es绘制3d图形的时候,绘制POIt标题的时候,不知道如何绘制 A:后来经过大量查询和实践,发现要以纹理的形式绘制上去,那个时候就先把文字生成图片,然后再以纹理形式绘制,期间再写了texture的glsl语言,后来跟3d图形一起绘制的时候,经过缩放,旋转等操作,发现标题纹理的变换情况有问题,原来是有投影和摄像机两个矩阵,后又经过大量实践和查询,给纹理单独又加了个模型矩阵,所以最终实现是投影,摄像机,模型三个矩阵,不像绘制图形j只用了2个矩阵。
2.跟我预想中不一样,我这边特地用swift和oc分别敲了一遍,oc的时候array2中只有obj2并且name为test,而swift中,array2依然是obj1,obj2,但obj2的name却变为了test,这个在oc中能理解,在swift中目前还没有理解,不过这是我要理解的目标了。
swift:
代码语言:javascript复制class Object {
var name = "name"
init(name : String) {
self.name = name
}
}
let obj1 = Object(name: "hello")
let obj2 = Object(name: "world")
var arr1 = [obj1,obj2]
var arr2 = arr1
arr1.remove(at: 0)
arr1[0].name = "test"
print(arr2)
oc:
代码语言:javascript复制Person *p1 = [[Person alloc]init];
p1.name = @"h";
Person *p2 = [[Person alloc]init];
p2.name = @"w";
NSMutableArray *a1 = [[NSMutableArray alloc]initWithArray:@[p1,p2]];
NSArray *a2 = a1;
[a1 removeObjectAtIndex:0];
Person *p = a1[0];
p.name = @"t";
NSLog(@"%@",a2);
使用gcd的group或是信号量都能满足需求,https://cloud.tencent.com/developer/article/1117086这是oc的方式
swift如下:
group
代码语言:javascript复制let group = DispatchGroup()
group.enter()
//网络请求
//完成回调里
group.leave()
group.enter()
//网络请求
//完成回调里
group.leave()
group.enter()
//网络请求
//完成回调里
group.leave()
//最后
group.notify(queue: .main) {
//UI更新
}
semaphore
代码语言:javascript复制let sem = DispatchSemaphore(value: 0)
var count = 0
//网络请求
//完成回调里
count = 1
//如果count=3了的话
sem.signal()
//网络请求
//完成回调里
count = 1
//如果count=3了的话
sem.signal()
//网络请求
//完成回调里
count = 1
//如果count=3了的话
sem.signal()
sem.wait()
//这个注意不要放在主线程,会阻塞, 信号量本质就是0阻塞,大于0继续执行
代码语言:javascript复制func showActionSheet(title:String,msg:String,btns:[String]) {
let alert = UIAlertController(title: title, message: msg, preferredStyle: .actionSheet)
for btn in btns {
let action = UIAlertAction(title: btn, style: .default) { (void) in
//这里是事件,由于刚刚已写了for in循环,拿不到index,这样可能做起来稍麻烦点
//1.匹配字符串 2.记录一个外部变量,进来 1,知道index
//当然用另外一种for循环会好很多
// 主要是要确定点的是哪个事件,最好由这里传递出去,index,用户知道i自己定义时传的btns,用Index确定用哪个事件
}
alert.addAction(action)
}
//再给个取消事件
let cancelAction = UIAlertAction(title: "取消", style: .cancel) { (void) in
}
alert.addAction(cancelAction)
self.present(alert, animated: true, completion: nil)
}
//在这里做点击事件处理
func actionSheetAction(index:Int) {
if index==0 {
}else if index==1 {
}
}