• iOS开发常用代码块(第二弹)


    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;
    }

    小伙伴们,今天就分享到这里,希望大家有所收获!O(∩_∩)O哈哈~

     

     

  • 相关阅读:
    创建工作窗口
    windows下关闭进程树
    VC socket api使用引入
    实现PC延迟执行函数
    CxImage实现9PNG
    bzoj 3211 花神游历各国
    codevs 3287 货车运输 NOIP2013提高组
    bzoj 3732 Network
    codevs 2370 小机房的树
    图论-最近公共祖先-在线树上倍增
  • 原文地址:https://www.cnblogs.com/tylerzhang/p/5943027.html
Copyright © 2020-2023  润新知