美文网首页
iOS开发中用到的小知识点(2)

iOS开发中用到的小知识点(2)

作者: WSGNSLog | 来源:发表于2018-03-30 15:32 被阅读24次
1、UICollectionView

(1)设置header悬浮效果

在iOS9.0后UICollectionView的头部视图也能像tableView的header一样利用系统api设置出现悬浮挂住的效果。(iOS8及之前需要重写UICollectionViewFlowLayout。)

 UICollectionViewFlowLayout *flowLayout = [[UICollectionViewFlowLayout alloc] init];
//header
flowLayout.sectionHeadersPinToVisibleBounds = YES;
//footer
flowLayout.sectionFootersPinToVisibleBounds = YES;

(2)dataSource、delegate已设置,collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath 方法仍不调用
解决方法:

self.automaticallyAdjustsScrollViewInsets = NO;//解决cellForItemAtIndexPath not called问题
2.xcode Jump to Definition 点击对象跳转

方法一:在XCode9之前,在变量或方法上, 按CMD+单击, 是直接Jump to Definition,但是现在, 是弹出这个菜单, 对于跳转到变量的定义,就多了一步了,开始可能会觉得不方便 对于想直接跳转到变量定义,现在是 control+command+单击, 也可以:

鼠标用户: 对准你的对象,Command+鼠标右键 
触摸板用户: 对准你的对象, Command+双指点击

方法二:偏好设置中设置

changeDefinition.png
3.折叠代码
全局折叠(折叠当前文件下的全部函数): Shift+Command+Option+Left/Right 
折叠方法:Command+Option+Left/Right 
4.Folder和Group的同步问题

在此之前,我们在XCode中,更改Folder的名字,在FInder中工程对应的文件夹的名字并不会同步的改变,这会造成我们重命名文件夹变得非常不方便,最终要先在XCode中移除,然后在Finder中重命名,再添加回Xcode

现在 在Xcode9中重名命Folder,Finder中的也同步的改变了 我们之前建议一个虚拟的group,并不会在对应的文件夹中建立真实的目录
Xcode9中,默认行为改变了, 变成了会建立对应的真实文件夹, 如果你需要像之前那样只是建立虚拟的group, 选择New Group without Folder 即可!

showinGroup.png

参考:https://blog.csdn.net/qq_31810357/article/details/78060505

5、屏幕截图

(1)截取当前屏幕内容

- (UIImage *)snapshotScreenInView{
     // 判断是否为retina屏, retina屏绘图时有放大因子
    if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)]){
        UIGraphicsBeginImageContextWithOptions(self.view.window.bounds.size, NO, [UIScreen mainScreen].scale);
    } else {
        UIGraphicsBeginImageContext(self.view.window.bounds.size);
    }
    [self.view.window.layer renderInContext:UIGraphicsGetCurrentContext()];
    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
   // 保存到相册
    UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil);
    return image;
 }

(2)截取contentView

//可以选择一个view进行截图
- (UIImage *)snapshotScreenInView:(UIView *)contentView {
    CGSize size = contentView.bounds.size;
    UIGraphicsBeginImageContextWithOptions(size, NO, [UIScreen mainScreen].scale);
    CGRect rect = contentView.frame;
    //  自iOS7开始,UIView类提供了一个方法-drawViewHierarchyInRect:afterScreenUpdates: 它允许你截取一个UIView或者其子类中的内容,并且以位图的形式(bitmap)保存到UIImage中
    [contentView drawViewHierarchyInRect:rect afterScreenUpdates:YES];

    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil);
    return image;
}
6、OC打印arc下的retaincount
id obj = [[NSObject alloc]init];
printf("retain count = %ld\n",CFGetRetainCount((__bridge CFTypeRef)(obj)));

需要注意的是,这里要用__bridge来转换,如果用__bridge_retained来转换的话,实际上,生成了一个Core Foundation对象,并且retain了一次原来的Objective-C对象,造成引用计数比真实值大一。

7、百度地图相关

1)百度地图在iOS中类似安卓语义化的搜索结果
反向地理编码回调里的反地理编码结果类BMKReverseGeoCodeSearchResult中有个属性(实测结果不准确,不如安卓)

结合当前位置POI的语义化结果描述
@property (nonatomic, copy) NSString *sematicDescription;
//反向地理编码回调
-(void) onGetReverseGeoCodeResult:(BMKGeoCodeSearch *)searcher result:(BMKReverseGeoCodeSearchResult *)result errorCode:(BMKSearchErrorCode)error{}
8、prefs:root 上架被拒问题

参考

9、AFNetWorking 获取statusCode

参考
2.0的方法

operation.response.statusCode == 500

3.0的方法:


//post
+ (void)httpPostRequest:(NSString *)url  Parameters:(NSDictionary *)params WithSuccess:(void (^)(id result))success failure:(void (^)(NSError *error))failure statusCode:(void (^)(NSInteger statusCode))statusCode
{
    AFHTTPSessionManager *manager = [self manager];
    [manager POST:url parameters:params success:^(NSURLSessionDataTask * _Nonnull task, id  _Nonnull responseObject) {
        /*注意:这里要强转下*/
        NSHTTPURLResponse * responses = (NSHTTPURLResponse *)task.response;
        statusCode(responses.statusCode);
        NSLog(@"1111111111111111:%ld",    responses.statusCode );
 
        success(responseObject);
    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
           if (failure) {
               failure(error);
           }
    }];

10、iOS开发AFN3.0中json解析获取error自己解析

因为后台原因,如果请求失败,返回的error错误信息是AFN中默认json解析数据


+ (void)requestUrlStr:(NSString *)urlStr
           parameters:(NSDictionary * _Nullable)parameters
              success:(nullable void (^)(id _Nullable responseObject))success
              failure:(void (^ _Nullable)(NSInteger errorCode))failure{
    
        AFHTTPSessionManager *sessionManager = [AFHTTPSessionManager manager];
        sessionManager.responseSerializer = [AFJSONResponseSerializer serializer];
        sessionManager.requestSerializer = [AFJSONRequestSerializer serializer];
        
        
        NSString *postUrl = [NSString stringWithFormat:@"%@?%@",urlStr,[HeadInfo getHeadInfo]];
        
        [sessionManager POST:postUrl parameters:parameters progress:^(NSProgress * _Nonnull uploadProgress) {
            
        } success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
            if (responseObject) {
                success(responseObject);
            }else{
                NSHTTPURLResponse *response = (NSHTTPURLResponse *)task.response;
                success([NSString stringWithFormat:@"%ld",(long)response.statusCode]);
            }
            
        } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
            NSHTTPURLResponse *response = (NSHTTPURLResponse *)task.response;
            NSData *data = error.userInfo[AFNetworkingOperationFailingURLResponseDataErrorKey];
            NSDictionary *errorInfo = nil;
            if (data != nil) {
                errorInfo = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
                //NSString *str = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
                NSLog(@"error--%@", errorInfo);
            }
            failure((errorInfo[@"errorCode"]?[errorInfo[@"errorCode"] integerValue]:response.statusCode));
        }];
    
}

参考

相关文章

网友评论

      本文标题:iOS开发中用到的小知识点(2)

      本文链接:https://www.haomeiwen.com/subject/xbsicftx.html