zoukankan      html  css  js  c++  java
  • iOS:小技巧(转)

    记录下一些不常用技巧,以防忘记,复制用。

    1、获取当前的View在Window的frame:

    1
    2
    UIWindow * window=[[[UIApplication sharedApplication] delegate] window];  
    CGRect rect=[_myButton convertRect:_myButton.bounds toView:window];

    2、UIImageView 和UILabel 等一些控件,需要加这句才能setCorn

    1
    _myLabel.layer.masksToBounds = YES;

    3、手机上的沙盒路径要加"Documents",不然存储写入失败!mac上不用!

    1
    2
    3
    [_myArray writeToFile:[[NSHomeDirectory() stringByAppendingPathComponent:@"Documents"]  stringByAppendingPathComponent:@"shopCategory.plist"] atomically:YES];
      
    NSArray *tempAllData = [NSArray arrayWithContentsOfFile:[[NSHomeDirectory() stringByAppendingPathComponent:@"Documents"]  stringByAppendingPathComponent:@"shopCategory.plist"]];

    后续补充:

        Document:一般需要持久的数据都放在此目录中,可以在当中添加子文件夹,iTunes备份和恢复的时候,会包括此目录。

        Library:设置程序的默认设置和其他状态信息

        temp:创建临时文件的目录,当iOS设备重启时,文件会被自动清除

    4、图片拉伸不失真,如聊天软件对话气泡

    1)、方法1,比较老的,

    1
    2
    UIImage *tempImage2 = [UIImage imageNamed:@"sub.png"];
    tempImage2 = [tempImage2 stretchableImageWithLeftCapWidth:tempImage2.size.width/2 topCapHeight:0];

     2)、方法2,比较新的

    1
    2
    3
    4
    5
    6
    7
    8
    UIImage *tempImage3 = [UIImage imageNamed:@"sub"];
     
    CGFloat tempH = tempImage3.size.height/2;
    CGFloat tempW = tempImage3.size.width/2;
         
    UIEdgeInsets tempEdg = UIEdgeInsetsMake(tempH, tempW, tempH, tempW);
         
    tempImage3 = [tempImage3 resizableImageWithCapInsets:tempEdg resizingMode:UIImageResizingModeStretch];

     5、视频截取缩略图,其中CMTimeMakeWithSeconds(5,1),调整截图帧数/秒数,一般不用特意去修改,不做参数传入,除非片头一段时间都一样的视频。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    #import <AVFoundation/AVFoundation.h>
     
    -(UIImage *)getThumbnailImage:(NSString *)videoURL
    {
        AVURLAsset *asset = [[AVURLAsset alloc] initWithURL:[NSURL fileURLWithPath:videoURL] options:nil];
         
        AVAssetImageGenerator *gen = [[AVAssetImageGenerator alloc] initWithAsset:asset];
         
        gen.appliesPreferredTrackTransform = YES;
        //控制截取时间
        CMTime time = CMTimeMakeWithSeconds(5, 1);
         
        NSError *error = nil;
         
        CMTime actualTime;
         
        CGImageRef image = [gen copyCGImageAtTime:time actualTime:&actualTime error:&error];
         
        UIImage *thumb = [[UIImage alloc] initWithCGImage:image];
         
        CGImageRelease(image);
         
        return thumb;
    }

     6、cell下划线左边顶住屏幕左边。

    1
    2
    3
    cell.preservesSuperviewLayoutMargins = NO;
    cell.layoutMargins = UIEdgeInsetsZero;
    cell.separatorInset = UIEdgeInsetsZero;

    7、去除xcode8冗余信息,虽然已经记住了。

    OS_ACTIVITY_MODE    disable

    8、播放音频

    1)工程内音频

    1-1)、获取音频路径

    1
    2
    3
    NSString *path = [[NSBundle mainBundle] pathForResource:@"shakebell" ofType:@"wav"];
         
    NSURL *url = [NSURL fileURLWithPath:path];

     1-2)、创建音频播放ID

    1
    2
    SystemSoundID soundID;
    AudioServicesCreateSystemSoundID((__bridge CFURLRef _Nonnull)(url), &soundID);

    1-3)、Play

    1
    AudioServicesPlaySystemSound(soundID);

    2)系统音频,参数为1000-1351,具体查表,如1007为“sms-received1”

    1
    AudioServicesPlaySystemSound(1007);

    9、字体自适应

    1)、固定的Frame,自适应Font大小,如数量增减,1和1000。

    1
    [label1 setAdjustsFontSizeToFitWidth:YES];

    2)、固定的Font,自适应Frame,用于信息类显示

    1
    [label2 sizeToFit]; 

    3)、固定的Font,获取自适应Frame值,反过来设置Label的Frame,用于信息类显示。这里的100是等下设置Label的width,也是返回的rect.frame.size.width

    1
    CGRect rect = [templabel.text boundingRectWithSize:CGSizeMake(100, CGFLOAT_MAX) options:NSStringDrawingUsesLineFragmentOrigin NSStringDrawingUsesFontLeading attributes:@{NSFontAttributeName:templabel.font} context:nil];

    10、AFNetworking 检测网络连接状态

    1
    2
    3
    4
    5
    [[AFNetworkReachabilityManager sharedManager]startMonitoring];
     
    [[AFNetworkReachabilityManager sharedManager]setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
            NSLog(@"%ld",status);
        }];

    11、编辑相关

    1)键盘事件通知

    1-1)、弹出键盘可能盖住TextField。监听键盘的通知

    1
    [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(moveView:) name:UIKeyboardDidChangeFrameNotification object:nil];

    1-2)、moveView方法里接收通知,tempTime是键盘动画时间,tempY是键盘当前的y轴位置。(接着要移动评论框或者移动后面的ScrollView都可以)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    CGFloat tempTime = [[noti.userInfo objectForKey:UIKeyboardAnimationDurationUserInfoKey] floatValue];
    CGFloat tempY = [[noti.userInfo objectForKey:UIKeyboardFrameEndUserInfoKey]CGRectValue].origin.y
     
    //重置约束条件
    //self.theBottomSpace.constant = ?;
     
    [UIView animateWithDuration:duration animations:^{
            //更新约束
            [self.view layoutIfNeeded];
     
        }];

    2)dealloc记得移除

    1
    [[NSNotificationCenter defaultCenter]removeObserver:self];

    3)touchesBegan:withEvent && scrollViewDidScroll -->屏幕点击&&屏幕滑动要取消编辑状态

    1
    [self.view endEditing:YES];

    12、上传图片(头像)

    1-1)、把Image打成NSData

    1
    NSData *imagedata = UIImageJPEGRepresentation(tempImage, 1.0);

    1-2)、AFNetworking的POST方法填如下。formData:POST方法里的Block参数,name:跟服务器有关,filename:随意填,mimeType:就image/jpg。

    1
    [formData appendPartWithFileData:imagedata name:@"imgFile" fileName:@"idontcare.jpg" mimeType:@"image/jpg"];

    13、强制布局

    1
    [self.view layoutIfNeeded];

    14、图片双击缩放

    1)scrollView才可以缩放,所以要把ImageView加在scrollView,给scrollView(这里的 self )添加手势识别。要设最大/小缩放比例!

    1
    2
    3
    4
    5
    UITapGestureRecognizer *imageTwoTap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(twoTapAction:)];
     
    imageTwoTap.numberOfTapsRequired = 2;
     
    [self addGestureRecognizer: imageTwoTap];

    2)第一次点哪放大哪,第二次恢复原来大小

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    #define SCALE_WIDTH  60         //要放大的局部宽度大小
    #define SCALE_HEIGHT 60         //要放大的局部高度大小
     
    -(void)twoTapAction:(UITapGestureRecognizer *)tempTap
    {
        if (self.zoomScale != 1.0)
        {
            [self setZoomScale:1.0 animated:YES];
        }
        else
        {
            CGPoint tempPoint = [tempTap locationInView:self];
            [self zoomToRect:CGRectMake(tempPoint.x-SCALE_WIDTH/2, tempPoint.y-SCALE_HEIGHT/2, SCALE_WIDTH, SCALE_HEIGHT) animated:YES];
        }
    }

     15、加载XIB

    1)、从多个cell样式的XIB加载。只有1个cell样式,可直接lastObject加载。(先根据不同的ID取,取不到再加载。)

    1-1)、获取XIB里的所有对象

    1
    NSArray *cellArry = [[NSBundle mainBundle] loadNibNamed:NSStringFromClass([MyTableCell class]) owner:self options:nil];

     1-2)、读取对应的Cell样式,此时的参数type为枚举,或基本数据类型。

    1
    cell = [cellArry objectAtIndex:type];

    2)、在 UIView + xxx 的类别文件里,可以添加这个类。方便加载单种Cell样式的XIB。

    1
    2
    3
    4
    + (instancetype)viewFromXib
    {
        return [[[NSBundle mainBundle] loadNibNamed:NSStringFromClass(self) owner:nil options:nil] lastObject];
    }

    16、常用延时执行

    1)、dispatch_after

    dispatch_after 代码块,一敲就出来,好像是Xcode8之后的。

    2)、performSelector

    -(void)performSelector: withObject: afterDelay: ;

  • 相关阅读:
    Java Web的web.xml文件作用及基本配置(转)
    Java Web的传值汇总(含JavaBean)
    路径前面的符号意思(~/,./,../,/)
    MySQL的insert语句的区别
    Linux 安全
    拇指玩」制作的「谷歌安装器」app
    经典角色权限系统设计五张表及拓展应用
    MySQL用户和权限管理
    【基于url权限管理 shiro(一)】--基础
    android图片文件的路径地址与Uri的相互转换
  • 原文地址:https://www.cnblogs.com/weijie-1/p/6178565.html
Copyright © 2011-2022 走看看