• iOS开发常用代码块(2)


    GCD定时器

    复制代码
    dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
    dispatch_source_t timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0,queue);
    dispatch_source_set_timer(timer,dispatch_walltime(NULL, 0),1.0*NSEC_PER_SEC, 0); //每秒执行
    dispatch_source_set_event_handler(timer, ^{
        //倒计时结束,关闭
        dispatch_source_cancel(timer); 
        dispatch_async(dispatch_get_main_queue(), ^{
    
        });
    });
    dispatch_resume(timer);
    复制代码

    图片上绘制文字

    复制代码
    - (UIImage *)imageWithTitle:(NSString *)title fontSize:(CGFloat)fontSize
    {
        //画布大小
        CGSize size=CGSizeMake(self.size.width,self.size.height);
        //创建一个基于位图的上下文
        UIGraphicsBeginImageContextWithOptions(size,NO,0.0);//opaque:NO  scale:0.0
    
        [self drawAtPoint:CGPointMake(0.0,0.0)];
    
        //文字居中显示在画布上
        NSMutableParagraphStyle* paragraphStyle = [[NSParagraphStyle defaultParagraphStyle] mutableCopy];
        paragraphStyle.lineBreakMode = NSLineBreakByCharWrapping;
    paragraphStyle.alignment=NSTextAlignmentCenter;//文字居中 //计算文字所占的size,文字居中显示在画布上 CGSize sizeText=[title boundingRectWithSize:self.size options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName:[UIFont systemFontOfSize:fontSize]}context:nil].size; CGFloat width = self.size.width; CGFloat height = self.size.height; CGRect rect = CGRectMake((width-sizeText.width)/2, (height-sizeText.height)/2, sizeText.width, sizeText.height); //绘制文字 [title drawInRect:rect withAttributes:@{ NSFontAttributeName:[UIFont systemFontOfSize:fontSize],NSForegroundColorAttributeName:[ UIColor whiteColor],NSParagraphStyleAttributeName:paragraphStyle}]; //返回绘制的新图形 UIImage *newImage= UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); return newImage; }
    复制代码

    查找一个视图的所有子视图

    复制代码
    - (NSMutableArray *)allSubViewsForView:(UIView *)view
    {
        NSMutableArray *array = [NSMutableArray arrayWithCapacity:0];
        for (UIView *subView in view.subviews)
        {
            [array addObject:subView];
            if (subView.subviews.count > 0)
            {
                [array addObjectsFromArray:[self allSubViewsForView:subView]];
            }
        }
        return array;
    }
    复制代码

    计算文件大小

    复制代码
    //文件大小
    - (long long)fileSizeAtPath:(NSString *)path
    {
        NSFileManager *fileManager = [NSFileManager defaultManager];
    
        if ([fileManager fileExistsAtPath:path])
        {
            long long size = [fileManager attributesOfItemAtPath:path error:nil].fileSize;
            return size;
        }
    
        return 0;
    }
    
    //文件夹大小
    - (long long)folderSizeAtPath:(NSString *)path
    {
        NSFileManager *fileManager = [NSFileManager defaultManager];
    
        long long folderSize = 0;
    
        if ([fileManager fileExistsAtPath:path])
        {
            NSArray *childerFiles = [fileManager subpathsAtPath:path];
            for (NSString *fileName in childerFiles)
            {
                NSString *fileAbsolutePath = [path stringByAppendingPathComponent:fileName];
                if ([fileManager fileExistsAtPath:fileAbsolutePath])
                {
                    long long size = [fileManager attributesOfItemAtPath:fileAbsolutePath error:nil].fileSize;
                    folderSize += size;
                }
            }
        }
    
        return folderSize;
    }
    复制代码

    UIView的设置部分圆角

    复制代码
    CGRect rect = view.bounds;
    CGSize radio = CGSizeMake(30, 30);//圆角尺寸
    UIRectCorner corner = UIRectCornerTopLeft|UIRectCornerTopRight;//这只圆角位置
    UIBezierPath *path = [UIBezierPath bezierPathWithRoundedRect:rect byRoundingCorners:corner cornerRadii:radio];
    CAShapeLayer *masklayer = [[CAShapeLayer alloc]init];//创建shapelayer
    masklayer.frame = view.bounds;
    masklayer.path = path.CGPath;//设置路径
    view.layer.mask = masklayer;
    复制代码

    计算字符串字符长度,一个汉字算两个字符

    复制代码
    //方法一:
    - (int)convertToInt:(NSString*)strtemp
    {
        int strlength = 0;
        char* p = (char*)[strtemp cStringUsingEncoding:NSUnicodeStringEncoding];
        for (int i=0 ; i<[strtemp lengthOfBytesUsingEncoding:NSUnicodeStringEncoding] ;i++)
        {
            if (*p)
            {
                p++;
                strlength++;
            }
            else
            {
                p++;
            }
    
        }
        return strlength;
    }
    
    //方法二:
    -(NSUInteger) unicodeLengthOfString: (NSString *) text
    {
        NSUInteger asciiLength = 0;
        for (NSUInteger i = 0; i < text.length; i++)
        {
            unichar uc = [text characterAtIndex: i];
            asciiLength += isascii(uc) ? 1 : 2;
        }
        return asciiLength;
    }
    复制代码

    防止滚动视图手势覆盖侧滑手势

    [scrollView.panGestureRecognizer requireGestureRecognizerToFail:self.navigationController.interactivePopGestureRecognizer];

    去掉导航栏返回的标题

    [[UIBarButtonItem appearance]setBackButtonTitlePositionAdjustment:UIOffsetMake(0, -60)forBarMetrics:UIBarMetricsDefault];

    字符串中是否含有中文

    复制代码
    + (BOOL)checkIsChinese:(NSString *)string
    {
        for (int i=0; i<string.length; i++)
        {
            unichar ch = [string characterAtIndex:i];
            if (0x4E00 <= ch  && ch <= 0x9FA5)
            {
                return YES;
            }
        }
        return NO;
    }
    复制代码

    dispatch_group的使用

    复制代码
    dispatch_group_t dispatchGroup = dispatch_group_create();
        dispatch_group_enter(dispatchGroup);
        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
            NSLog(@"第一个请求完成");
            dispatch_group_leave(dispatchGroup);
        });
    
        dispatch_group_enter(dispatchGroup);
    
        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(10 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
            NSLog(@"第二个请求完成");
            dispatch_group_leave(dispatchGroup);
        });
    
        dispatch_group_notify(dispatchGroup, dispatch_get_main_queue(), ^(){
            NSLog(@"请求完成");
        });
    复制代码

    UITextField每四位加一个空格,实现代理

    复制代码
    - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
    {
        // 四位加一个空格
        if ([string isEqualToString:@""])
        {
            // 删除字符
            if ((textField.text.length - 2) % 5 == 0)
            {
                textField.text = [textField.text substringToIndex:textField.text.length - 1];
            }
            return YES;
        }
        else
        {
            if (textField.text.length % 5 == 0)
            {
                textField.text = [NSString stringWithFormat:@"%@ ", textField.text];
            }
        }
        return YES;
    }
    复制代码

    获取手机安装的应用

    复制代码
    Class c =NSClassFromString(@"LSApplicationWorkspace");
    id s = [(id)c performSelector:NSSelectorFromString(@"defaultWorkspace")];
    NSArray *array = [s performSelector:NSSelectorFromString(@"allInstalledApplications")];
    for (id item in array)
    {
        NSLog(@"%@",[item performSelector:NSSelectorFromString(@"applicationIdentifier")]);
        NSLog(@"%@",[item performSelector:NSSelectorFromString(@"bundleVersion")]);
        NSLog(@"%@",[item performSelector:NSSelectorFromString(@"shortVersionString")]);
    }
    复制代码

    应用内打开系统设置界面

    复制代码
    //iOS8之后
    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]];
    //如果App没有添加权限,显示的是设定界面。如果App有添加权限(例如通知),显示的是App的设定界面。
    
    //iOS8之前
    //先添加一个url type,在代码中调用如下代码,即可跳转到设置页面的对应项
    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"prefs:root=WIFI"]];
    
    可选值如下:
    About — prefs:root=General&path=About
    Accessibility — prefs:root=General&path=ACCESSIBILITY
    Airplane Mode On — prefs:root=AIRPLANE_MODE
    Auto-Lock — prefs:root=General&path=AUTOLOCK
    Brightness — prefs:root=Brightness
    Bluetooth — prefs:root=General&path=Bluetooth
    Date & Time — prefs:root=General&path=DATE_AND_TIME
    FaceTime — prefs:root=FACETIME
    General — prefs:root=General
    Keyboard — prefs:root=General&path=Keyboard
    iCloud — prefs:root=CASTLE
    iCloud Storage & Backup — prefs:root=CASTLE&path=STORAGE_AND_BACKUP
    International — prefs:root=General&path=INTERNATIONAL
    Location Services — prefs:root=LOCATION_SERVICES
    Music — prefs:root=MUSIC
    Music Equalizer — prefs:root=MUSIC&path=EQ
    Music Volume Limit — prefs:root=MUSIC&path=VolumeLimit
    Network — prefs:root=General&path=Network
    Nike + iPod — prefs:root=NIKE_PLUS_IPOD
    Notes — prefs:root=NOTES
    Notification — prefs:root=NOTIFICATI*****_ID
    Phone — prefs:root=Phone
    Photos — prefs:root=Photos
    Profile — prefs:root=General&path=ManagedConfigurationList
    Reset — prefs:root=General&path=Reset
    Safari — prefs:root=Safari
    Siri — prefs:root=General&path=Assistant
    Sounds — prefs:root=Sounds
    Software Update — prefs:root=General&path=SOFTWARE_UPDATE_LINK
    Store — prefs:root=STORE
    Twitter — prefs:root=TWITTER
    Usage — prefs:root=General&path=USAGE
    VPN — prefs:root=General&path=Network/VPN
    Wallpaper — prefs:root=Wallpaper
    Wi-Fi — prefs:root=WIFI
    复制代码

    动画暂停再开始

    复制代码
    -(void)pauseLayer:(CALayer *)layer
    {
        CFTimeInterval pausedTime = [layer convertTime:CACurrentMediaTime() fromLayer:nil];
        layer.speed = 0.0;
        layer.timeOffset = pausedTime;
    }
    
    -(void)resumeLayer:(CALayer *)layer
    {
        CFTimeInterval pausedTime = [layer timeOffset];
        layer.speed = 1.0;
        layer.timeOffset = 0.0;
        layer.beginTime = 0.0;
        CFTimeInterval timeSincePause = [layer convertTime:CACurrentMediaTime() fromLayer:nil] - pausedTime;
        layer.beginTime = timeSincePause;
    }
    复制代码

    iOS版中数字的格式化

    复制代码
    //通过NSNumberFormatter,同样可以设置NSNumber输出的格式。例如如下代码:
    NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
    formatter.numberStyle = NSNumberFormatterDecimalStyle;
    NSString *string = [formatter stringFromNumber:[NSNumber numberWithInt:123456789]];
    NSLog(@"Formatted number string:%@",string);
    //输出结果为:[1223:403] Formatted number string:123,456,789
    
    //其中NSNumberFormatter类有个属性numberStyle,它是一个枚举型,设置不同的值可以输出不同的数字格式。该枚举包括:
    typedef NS_ENUM(NSUInteger, NSNumberFormatterStyle) {
        NSNumberFormatterNoStyle = kCFNumberFormatterNoStyle,
        NSNumberFormatterDecimalStyle = kCFNumberFormatterDecimalStyle,
        NSNumberFormatterCurrencyStyle = kCFNumberFormatterCurrencyStyle,
        NSNumberFormatterPercentStyle = kCFNumberFormatterPercentStyle,
        NSNumberFormatterScientificStyle = kCFNumberFormatterScientificStyle,
        NSNumberFormatterSpellOutStyle = kCFNumberFormatterSpellOutStyle
    };
    //各个枚举对应输出数字格式的效果如下:其中第三项和最后一项的输出会根据系统设置的语言区域的不同而不同。
    [1243:403] Formatted number string:123456789
    [1243:403] Formatted number string:123,456,789
    [1243:403] Formatted number string:¥123,456,789.00
    [1243:403] Formatted number string:-539,222,988%
    [1243:403] Formatted number string:1.23456789E8
    [1243:403] Formatted number string:一亿二千三百四十五万六千七百八十九
    复制代码

    如何获取的WebView所有的图片地址

    复制代码
    //UIWebView
    - (void)webViewDidFinishLoad:(UIWebView *)webView
    {
        //这里是js,主要目的实现对url的获取
        static  NSString * const jsGetImages =
        @"function getImages(){
        var objs = document.getElementsByTagName("img");
        var imgScr = '';
        for(var i=0;i<objs.length;i++){
        imgScr = imgScr + objs[i].src + '+';
        };
        return imgScr;
        };";
    
        [webView stringByEvaluatingJavaScriptFromString:jsGetImages];//注入js方法
        NSString *urlResult = [webView stringByEvaluatingJavaScriptFromString:@"getImages()"];
        NSArray *urlArray = [NSMutableArray arrayWithArray:[urlResult componentsSeparatedByString:@"+"]];
        //urlResurlt 就是获取到得所有图片的url的拼接;mUrlArray就是所有Url的数组
    }
    
    //WKWebView
    - (void)webView:(WKWebView *)webView didFinishNavigation:(null_unspecified WKNavigation *)navigation
    {
        static  NSString * const jsGetImages =
        @"function getImages(){
        var objs = document.getElementsByTagName("img");
        var imgScr = '';
        for(var i=0;i<objs.length;i++){
        imgScr = imgScr + objs[i].src + '+';
        };
        return imgScr;
        };";
    
        [webView evaluateJavaScript:jsGetImages completionHandler:nil];
        [webView evaluateJavaScript:@"getImages()" completionHandler:^(id _Nullable result, NSError * _Nullable error) {
            NSLog(@"%@",result);
        }];
    }
    复制代码

    获取到的WebView的高度

    CGFloat height = [[self.webView stringByEvaluatingJavaScriptFromString:@"document.body.offsetHeight"] floatValue];

    导航栏变为纯透明

    复制代码
    //第一种方法
    //导航栏纯透明
    [self.navigationBar setBackgroundImage:[UIImage new] forBarMetrics:UIBarMetricsDefault];
    //去掉导航栏底部的黑线
    self.navigationBar.shadowImage = [UIImage new];
    
    //第二种方法
    [[self.navigationBar subviews] objectAtIndex:0].alpha = 0;
    复制代码

    tabBar变为纯透明

    [self.tabBar setBackgroundImage:[UIImage new]];
    self.tabBar.shadowImage = [UIImage new];

    navigationBar根据滑动距离的渐变色实现

    复制代码
    //第一种
    - (void)scrollViewDidScroll:(UIScrollView *)scrollView
    {
        CGFloat offsetToShow = 200.0;//滑动多少就完全显示
        CGFloat alpha = 1 - (offsetToShow - scrollView.contentOffset.y) / offsetToShow;
        [[self.navigationController.navigationBar subviews] objectAtIndex:0].alpha = alpha;
    }
    
    //第二种
    - (void)scrollViewDidScroll:(UIScrollView *)scrollView
    {
        CGFloat offsetToShow = 200.0;
        CGFloat alpha = 1 - (offsetToShow - scrollView.contentOffset.y) / offsetToShow;
    
        [self.navigationController.navigationBar setShadowImage:[UIImage new]];
        [self.navigationController.navigationBar setBackgroundImage:[self imageWithColor:[[UIColor orangeColor]colorWithAlphaComponent:alpha]] forBarMetrics:UIBarMetricsDefault];
    }
    
    //生成一张纯色的图片
    - (UIImage *)imageWithColor:(UIColor *)color
    {
        CGRect rect = CGRectMake(0.0f, 0.0f, 1.0f, 1.0f);
        UIGraphicsBeginImageContext(rect.size);
        CGContextRef context = UIGraphicsGetCurrentContext();
        CGContextSetFillColorWithColor(context, [color CGColor]);
        CGContextFillRect(context, rect);
        UIImage *theImage = UIGraphicsGetImageFromCurrentImageContext();
        UIGraphicsEndImageContext();
    
        return theImage;
    }
    复制代码
  • 相关阅读:
    软件杯华为ModelArts平台
    软件杯第一阶段博客
    《系统架构》阅读笔记05
    第11周周博客
    测试面试题
    杭电2014 (第一次用vector ac题目)
    杭电 2013 猴子吃桃 递归解法&循环解法
    杭电2012 质数问题
    杭电2629 Identity Card
    杭电1170
  • 原文地址:https://www.cnblogs.com/angelfeather/p/5977509.html
Copyright © 2020-2023  润新知