IOS 常用技术

  1.   对xib文件的处理
xib的加载可以通过 [NSbundle maibundle] loadnibnamed :(NSString*)str owner:(NSString)temp  dic(NSDictionary*)dic 加载 xib的fileowner文件。 然后通过下标得到sub 。 如果要获取xib中固定的view,则可以通过viewwithtag获取。 如果是一个则可以firstobject。

特别注意:xib的某个view对应的类文件,uiview uiviewcontroller等不同。所有xib中的子视图需要加入到根视图控制器的视图中。xib的类文件加载,即[xx alloc ] loadnibnamed   该方法是通过类加载。单线程。上面的是包加载。

               如果xib中的view需要在外部更改,即视图可变。则需要IbOutlet连线。连线有问题,右键superview 即可。有错误提示 警告符号。xcode连线的bug。automatic中的h文件不一定是xib对应的.h文件。mathamatic才是正确的。

2. MVC模式,M V通过C来中转,可以使用KVC key value code 。 Controller通过模型加载外部数据(setvaluesforkeys dic[可变数组]), 然后再controller展示数据给view。


3.懒加载,视图中的子视图内容需要经常刷新,而且对应属性位置只需要设定一次。需要self.label = self label(调用get方法)。自定义属性一般是strong,需要指向强引用的ui,[ [uibutton alloc ]init].

特别注意上面截图中的 _icon 不调用 self icon (即get方法,即不实例化,alloc)。 如果icon本身没有数据,则_icon会为nil.而self.icon会alloc init实例化 


4.动画,首尾动画,块动画。比如图片浏览器放大缩小功能。


5.代码自动布局,约束。 self.frame在父视图中的宽高(宽高可变,同时x,y的实际位置跟superview的bounds(决定子视图对应其父视图的原点)有关,同时也跟self.center有关)  self.bounds自身控件的宽高[固定,跟superview无关]。 OC语言自动布局时 切忌在 height = height-20.自身调用的问题。

错误方法:直接修改结构体属性


正确方法:简单修改结构体属性。


界面上的控件有些有规律而且比较多,纯代码写。界面上添加控件需要连线,复制,容易出错。

6.常用控件,UIButton初始化不需要alloc ,btn可以设置image 和title。两个view并排. .type = custom所有属性自己修改。

 

7.快捷键  alt+shift + ->选中右边的单元

继承自nsobject


8.选中方法列表,直接输入view将展示匹配的方法.


9.高级Ui, 比如dwtaglist做搜索标签


10. 

监听变化

__weak typeof(self) weakSelf = self;

    [self.myTableView addLegendFooterWithRefreshingBlock:^{

        [weakSelf createHTTPReauestBlock];

    }];

#pragma mark - 初始加载

/**

 * isAddReplyToRefresh 判断是否是回复

 */

-(void)createHTTPReauestBlock:(NSString *)str IsAddReplyToRefresh:(BOOL)isAddReplyToRefresh{

[[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:YES];//持续监听

    AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];

    //显示加载提醒,并关闭左右导航栏按钮

    [self show];

    NSDictionary *dic = @{@"TopicID":self.topicIDString,@"Floor":str,@"Version":@"1.0",@"SystemNum":@"IOS"};

    NSLog(@"%@",dic);

    __weak typeof(self) weakSelf = self;

    [manager POST:SelectTopicDetailURL parameters:dic success:^(AFHTTPRequestOperation *operation, id responseObject) {

        [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:NO];//请求到数据后断开监听

        NSLog(@"list 请求成功 json %@",responseObject);

        NSString *html = operation.responseString;

        NSData *data1 = [html dataUsingEncoding:NSUTF8StringEncoding];

        NSDictionary *data = [NSJSONSerialization JSONObjectWithData:data1 options:NSJSONReadingMutableContainers error:nil];//解析

        [weakSelf hide];

        weakSelf.myTableView.footer.hidden = NO;

       //删除之前的数据

        if (weakSelf.dataArray.count != 0) {

            [weakSelf.dataArray removeAllObjects];

        }

        

        for (NSDictionary *dic in [data objectForKey:@"list"]) {

            PostDetailModel *model = [[PostDetailModel alloc] init];

            [model setValuesForKeysWithDictionary:dic];

            if (model.Floor == 0) {//楼主信息

                firstModel = model;

                self.ParentID = firstModel.ParentID;

            }else{//他人评论

                [weakSelf.dataArray addObject:model];

            }

        }

        

        if (isAddReplyToRefresh) {

            //回复成功

            self.ReplyNum++;//评论数加1

            self.pageNumber = 2;//下次上拉后继续

        }


        //添加表头视图

        [self AddContentToTableHeaderView:firstModel];


        [weakSelf.myTableView reloadData];

    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {

        [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:NO];

        NSLog(@"list请求出错了");

        [weakSelf hide];

    }];


#pragma mark - 上提加载

- (void)createHTTPReauestBlock{

    

    [self show];

    if (self.pageNumber == 20) {

        [self.myTableView.footer endRefreshing];

        self.myTableView.tableFooterView=[[UIView alloc] initWithFrame:CGRectZero];

//        self.myTableView.estimatedSectionFooterHeight = 0;

        [self hide];

        [self createPtompt:@"未加载到更多的数据~"];

        return;

    }

    [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:YES];

    AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];

    //显示加载提醒,并关闭底部固定视图

    [self show];

    NSDictionary *dic = @{@"TopicID":self.topicIDString,@"Floor":[NSString stringWithFormat:@"%ld",(long)self.pageNumber],@"Version":@"1.0",@"SystemNum":@"iOS"};

    NSLog(@" dicdicdic  %@",dic);

    

    __weak typeof(self) weakSelf = self;

    [manager POST:SelectTopicDetailURL parameters:dic success:^(AFHTTPRequestOperation *operation, id responseObject) {

        [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:NO];

        NSLog(@"list 请求成功 json %@",responseObject);

        NSString *html = operation.responseString;

        NSData *data1 = [html dataUsingEncoding:NSUTF8StringEncoding];

        NSDictionary *data = [NSJSONSerialization JSONObjectWithData:data1 options:NSJSONReadingMutableContainers error:nil];

        NSLog(@"dictionary+++++ %@",data);

        [weakSelf hide];

        [weakSelf.myTableView.footer endRefreshing];

        if ( [[data objectForKey:@"list"] count] == 0 ) {

            weakSelf.pageNumber = 20;

            [weakSelf createPtompt:@"未加载到更多的数据~"];

            return;

        }

        

        weakSelf.pageNumber = weakSelf.pageNumber + 1;

        for (NSDictionary *dic in [data objectForKey:@"list"]) {

            PostDetailModel *model = [[PostDetailModel alloc] init];

            [model setValuesForKeysWithDictionary:dic];

            if (model.Floor == 0) {//楼主信息

                firstModel = model;

                self.ParentID = firstModel.ParentID;

            }else{//他人评论

                [weakSelf.dataArray addObject:model];

            }

            

        }

        [weakSelf.myTableView reloadData];

    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {

        [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:NO];

        NSLog(@"list请求出错了");

        [weakSelf hide];

        [weakSelf.myTableView.footer endRefreshing];

    }];

    

}


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
,发送类别,概率,以及物体在相机坐标系下的xyz.zip目标检测(Object Detection)是计算机视觉领域的一个核心问题,其主要任务是找出图像中所有感兴趣的目标(物体),并确定它们的类别和位置。以下是对目标检测的详细阐述: 一、基本概念 目标检测的任务是解决“在哪里?是什么?”的问题,即定位出图像中目标的位置并识别出目标的类别。由于各类物体具有不同的外观、形状和姿态,加上成像时光照、遮挡等因素的干扰,目标检测一直是计算机视觉领域最具挑战性的任务之一。 二、核心问题 目标检测涉及以下几个核心问题: 分类问题:判断图像中的目标属于哪个类别。 定位问题:确定目标在图像中的具体位置。 大小问题:目标可能具有不同的大小。 形状问题:目标可能具有不同的形状。 三、算法分类 基于深度学习的目标检测算法主要分为两大类: Two-stage算法:先进行区域生成(Region Proposal),生成有可能包含待检物体的预选框(Region Proposal),再通过卷积神经网络进行样本分类。常见的Two-stage算法包括R-CNN、Fast R-CNN、Faster R-CNN等。 One-stage算法:不用生成区域提议,直接在网络中提取特征来预测物体分类和位置。常见的One-stage算法包括YOLO系列(YOLOv1、YOLOv2、YOLOv3、YOLOv4、YOLOv5等)、SSD和RetinaNet等。 四、算法原理 以YOLO系列为例,YOLO将目标检测视为回归问题,将输入图像一次性划分为多个区域,直接在输出层预测边界框和类别概率。YOLO采用卷积网络来提取特征,使用全连接层来得到预测值。其网络结构通常包含多个卷积层和全连接层,通过卷积层提取图像特征,通过全连接层输出预测结果。 五、应用领域 目标检测技术已经广泛应用于各个领域,为人们的生活带来了极大的便利。以下是一些主要的应用领域: 安全监控:在商场、银行
目标检测(Object Detection)是计算机视觉领域的一个核心问题,其主要任务是找出图像中所有感兴趣的目标(物体),并确定它们的类别和位置。以下是对目标检测的详细阐述: 一、基本概念 目标检测的任务是解决“在哪里?是什么?”的问题,即定位出图像中目标的位置并识别出目标的类别。由于各类物体具有不同的外观、形状和姿态,加上成像时光照、遮挡等因素的干扰,目标检测一直是计算机视觉领域最具挑战性的任务之一。 二、核心问题 目标检测涉及以下几个核心问题: 分类问题:判断图像中的目标属于哪个类别。 定位问题:确定目标在图像中的具体位置。 大小问题:目标可能具有不同的大小。 形状问题:目标可能具有不同的形状。 三、算法分类 基于深度学习的目标检测算法主要分为两大类: Two-stage算法:先进行区域生成(Region Proposal),生成有可能包含待检物体的预选框(Region Proposal),再通过卷积神经网络进行样本分类。常见的Two-stage算法包括R-CNN、Fast R-CNN、Faster R-CNN等。 One-stage算法:不用生成区域提议,直接在网络中提取特征来预测物体分类和位置。常见的One-stage算法包括YOLO系列(YOLOv1、YOLOv2、YOLOv3、YOLOv4、YOLOv5等)、SSD和RetinaNet等。 四、算法原理 以YOLO系列为例,YOLO将目标检测视为回归问题,将输入图像一次性划分为多个区域,直接在输出层预测边界框和类别概率。YOLO采用卷积网络来提取特征,使用全连接层来得到预测值。其网络结构通常包含多个卷积层和全连接层,通过卷积层提取图像特征,通过全连接层输出预测结果。 五、应用领域 目标检测技术已经广泛应用于各个领域,为人们的生活带来了极大的便利。以下是一些主要的应用领域: 安全监控:在商场、银行
目标检测(Object Detection)是计算机视觉领域的一个核心问题,其主要任务是找出图像中所有感兴趣的目标(物体),并确定它们的类别和位置。以下是对目标检测的详细阐述: 一、基本概念 目标检测的任务是解决“在哪里?是什么?”的问题,即定位出图像中目标的位置并识别出目标的类别。由于各类物体具有不同的外观、形状和姿态,加上成像时光照、遮挡等因素的干扰,目标检测一直是计算机视觉领域最具挑战性的任务之一。 二、核心问题 目标检测涉及以下几个核心问题: 分类问题:判断图像中的目标属于哪个类别。 定位问题:确定目标在图像中的具体位置。 大小问题:目标可能具有不同的大小。 形状问题:目标可能具有不同的形状。 三、算法分类 基于深度学习的目标检测算法主要分为两大类: Two-stage算法:先进行区域生成(Region Proposal),生成有可能包含待检物体的预选框(Region Proposal),再通过卷积神经网络进行样本分类。常见的Two-stage算法包括R-CNN、Fast R-CNN、Faster R-CNN等。 One-stage算法:不用生成区域提议,直接在网络中提取特征来预测物体分类和位置。常见的One-stage算法包括YOLO系列(YOLOv1、YOLOv2、YOLOv3、YOLOv4、YOLOv5等)、SSD和RetinaNet等。 四、算法原理 以YOLO系列为例,YOLO将目标检测视为回归问题,将输入图像一次性划分为多个区域,直接在输出层预测边界框和类别概率。YOLO采用卷积网络来提取特征,使用全连接层来得到预测值。其网络结构通常包含多个卷积层和全连接层,通过卷积层提取图像特征,通过全连接层输出预测结果。 五、应用领域 目标检测技术已经广泛应用于各个领域,为人们的生活带来了极大的便利。以下是一些主要的应用领域: 安全监控:在商场、银行
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值