前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布

answer

作者头像
清墨
发布2019-03-20 14:29:49
5270
发布2019-03-20 14:29:49
举报
文章被收录于专栏:清墨_iOS分享清墨_iOS分享
  1. 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 {
            
        }
        
    }
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019.03.19 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档