文档章节

iOS app开发中常用技巧

IamOkay
 IamOkay
发布于 2016/05/21 20:35
字数 742
阅读 95
收藏 2

1.退出App

- (void)exitApplication {
    AppDelegate *app = [UIApplication sharedApplication].delegate;
    UIWindow *window = app.window;
    
    [UIView animateWithDuration:1.0f animations:^{
        window.alpha = 0;
        window.frame = CGRectMake(0, window.bounds.size.width, 0, 0);
    } completion:^(BOOL finished) {
        exit(0);
    }];
    
}

必要时,我们还需要设置Plist属性

在plist设置屬性:Application does not run in background = YES

2.直接回到主界面

[self.navigationController popToRootViewControllerAnimated:YES]; 

当然,你也可以使用 [UIApplication shareApplication].keyWindow.rootViewController.viewControllers进行遍历回退

3.禁止UIScrollView及其子类边界弹簧效果

mWebView..scrollView.bounces = NO

4.修改状态栏颜色

第一种方法:

[UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleBlackOpaque;
self.navigationController.navigationBar.tintColor = [UIColor blackColor];

if (is_ios_7_Later) {

   self.view.window.frame = CGRectMake(0, 20, self.view.window.frame.size.width, self.view.window.frame.size.height - 20);
  [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleBlackTranslucent animated:NO];
}

第二种方法(这方法比较简单):

UIView *statusBarView=[[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 20)];
statusBarView.backgroundColor=[UIColor blackColor];
[self.view addSubview:statusBarView];
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent animated:NO];

[UIApplication sharedApplication].keyWindow.backgroundColor = [UIColor colorWithHexString:@"#D3331f"];

    if([[UIColor getWhiteBlackByHexString:@"#D3331f"] isEqual:[UIColor blackColor]])
    {
        [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleDefault];
    }
    else
    {
        [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
    }

5.解决UIImage的imageWithContentsOfFile获取图片非自动适配的问题

+(NSString *) pathForResource:(NSString *) picName type:(NSString *) type
{
    
    if([NSStringisEmptyOrNil:picName])
    {
        returnnil;
    }
    if(![NSStringisEmptyOrNil:type] && [NSStringtrim:type].length>0)
    {
       
        
        return [selfgetBundlePath:picName type:type];
        
    }
    else
    {
        return [self pathForResource:picName];
    }

}

+(NSString *) getBundlePath:(NSString *) picName type:(NSString *) type
{
    
    NSString* suggestScaleSuffix  = [UIImagegetImageScaleSuffix];
    
    NSString * fitForPicName = [picName stringByAppendingString:suggestScaleSuffix];
    NSString * path = [[NSBundlemainBundle] pathForResource:fitForPicName ofType:type inDirectory:@"myios.bundle"];
    
    if([NSStringisEmptyOrNil:path])
    {
        
        if([@"@3x"isEqualToString:suggestScaleSuffix])
        {
            NSString * fitForPicName = [picName stringByAppendingString:@"@2x"];
            path = [[NSBundlemainBundle] pathForResource:fitForPicName ofType:type inDirectory:@"myios.bundle"];
            
        }
        
        if([NSStringisEmptyOrNil:path] && [@"@2x"isEqualToString:suggestScaleSuffix])
        {
            path = [[NSBundlemainBundle] pathForResource:picName ofType:type inDirectory:@"myios.bundle"];
            
        }
        
    }
    return path;
}

+(NSString *) pathForResource:(NSString *) imageFullName
{
    
    if(imageFullName==nil)
    {
        return  nil;
    }
    
     NSString *pathExtension = [imageFullName pathExtension];
     NSString *subExts = @".png|.PNG|.9.png|.9.PNG|.jpeg|.JPEG|.jpg|.JEG|.bmp|.BMP|.gif|.GIF|.ico|.ICO|.tif|.TIF|.cur|.CUR|.xbm|.XBM";
    
    if([NSStringisEmptyOrNil:pathExtension])
    {
        NSString * path = nil;
        NSArray * imageSuffixes = [subExts componentsSeparatedByString:@"|"];
        
        for (NSString * imageSuffix in imageSuffixes)
        {
            path = [selfgetBundlePath:imageFullName type:imageSuffix];
            
            if(![NSStringisEmptyOrNil:path])
            {
                return path;
            }
        }
    
    }
    elseif([subExts containsString:[@"."stringByAppendingString:pathExtension]])
    {
        
        imageFullName = [imageFullName substringWithRange:NSMakeRange(0, imageFullName.length-pathExtension.length-1)];
        NSString * path = [selfgetBundlePath:imageFullName type:pathExtension];
    
        return path;
    }
    
    returnnil;
}


+(NSString *)getImageScaleSuffix
{
    if ( [[[UIDevicecurrentDevice] systemVersion] intValue] >= 4 && [[UIScreenmainScreen] scale] == 2.0 )
    {
        
        return@"@2x";
    }elseif ( [[[UIDevicecurrentDevice] systemVersion] intValue] >= 4 && [[UIScreenmainScreen] scale] == 3.0 )
    {
        
        return@"@3x";
    
    }else{
        return@"";
    }

}

6.解决SQlite数据库批量操作问题

批量插入:

INSERT INTO MYTABLE VALUES(.....),(.....),(.....).....(.....);

批量更新插入

REPLACE INTO MYTABLE VALUES(.....),(.....),(.....).....(.....);

查询受影响的函数

在sqlite中可以直接调用

sqlite_changes(sqlite * db);

当然你也可以使用如下语句

SELECT CHANGES();

7.iOS UITableView默认行高问题

UITableView默认secctionheader与sectionFooter高度是10,当然代理返回值是0的话依然是10,为了不影响使用0高度,将代理的返回值0.0001

关于UITableView缓存identifier 

​​​​​​​不要写成局部静态变量,建议写成全局变量,并且在初始化时使其变成和以往不重复的值

8.时间戳计算

  NSDateFormatter * datefmt = [[NSDateFormatteralloc] init];
        [datefmt setTimeStyle:NSDateFormatterNoStyle];
        [datefmt setDateStyle:NSDateFormatterNoStyle];
        NSTimeZone * timezone = [NSTimeZonetimeZoneWithName:@"Asia/Chongqing"];
        [datefmt setTimeZone: timezone];
        
        [datefmt setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
        
        NSDate * sDate = [datefmt dateFromString:@"2014-12-25 12:24:35"];
        
        NSDate * tDate = [NSDatedate];
        
        NSTimeInterval startTime = [sDate timeIntervalSince1970];
        NSTimeInterval toTime =[tDate timeIntervalSince1970] ;
        NSTimeInterval interval = round(toTime-startTime);
        
        NSLog(@"interval=%f",interval);
        NSLog(@"interval=%@",[datefmt stringFromDate:[NSDatedateWithTimeIntervalSince1970:interval ]]);

9.ARC下获取对象的引用计数

NSLog(@"Retain count is %ld", CFGetRetainCount((__bridge CFTypeRef)myObject));

10.拦截Ajax请求,实现native与web同步与异步通信

重点是实现NSURLProtocol和跨域通信问题

11.截屏

- (UIImage *)screenshot:(UIViewController *) controller
{
    CGRect rect = controller.view.bounds;
    
    UIGraphicsBeginImageContextWithOptions(rect.size, NO, [UIScreen mainScreen].scale);
    CGContextRef context = UIGraphicsGetCurrentContext();
    if (context == NULL) return nil;
    CGContextTranslateCTM(context, -rect.origin.x, -rect.origin.y);
    
    [self layoutIfNeeded];
    [[controller.view layer] renderInContext:context];
    
    UIImage *screenshotImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return screenshotImage;
}

 

© 著作权归作者所有

共有 人打赏支持
IamOkay
粉丝 190
博文 463
码字总数 376795
作品 0
海淀
程序员
私信 提问
15+ 个有用的 iPhone 应用开发教程

从头开始构建一个购物清单应用程序 iPhone Development Tutorials from thenewboston Learn How To Develop For The iPhone How To Create Your First iPhone App (2012 Edition) 创建首个 ......

oschina
2013/01/04
3.3K
3
OSC 第 76 期高手问答 — iOS 性能优化&数据持久化

OSCHINA 本期高手问答 ( 5月27日- 6月2日) 我们请来了@智捷课堂(关东升)为大家解答关于 iOS 性能优化和数据持久化 方面的问题。 关东升,智捷课堂创始人,国内知名 iOS 技术作家,iOS 技术...

叶秀兰
2015/05/27
4.1K
28
那些在学习iOS开发前就应该知道的事(part 1)

英文原文:Things I wish I had known before starting iOS development—Part 1 设计师设计出来了一个不错的引导界面,然而当我看到设计稿的时候,我们的app也没几天就要上线了。这个界面模...

TomatosX
2015/06/12
0
0
使用 iOS 7 在更新应用时应该避免的 5 件事情

iOS 7的发布将移动手机的世界推向一个新的高潮,很多人认为ios 7是ios历史上影响最广泛的升级之一。显然,iOS 7为全世界几亿的用户提供了一个更加强大健壮的平台,并且,在短短的几周后,在A...

oschina
2013/07/30
3.9K
6
iOS项目开发

主要需求: 通过远程网络对汽车进行OBD(启动、熄火、门锁检测、车辆状态设置与检测、胎压等相关汽车状态的设置与获取展示) 工作内容: 1. 熟悉车载CAN、OBD相关行业知识 2.负责智能穿戴产品I...

黄淑宾
2017/02/22
3
0

没有更多内容

加载失败,请刷新页面

加载更多

手动回滚事物

TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();

素剑步青尘
9分钟前
0
0
jvm 运行参数归纳

-XX:autoBoxCacheMax 包装类型的缓存最大值参见:https://my.oschina.net/u/2552286/blog/2990515 -XX:autoBoxCacheMax=7777 -Xms256M -Xmx1024M 堆的初始内存与最大内存 在生产中,这两个值...

Canaan_
11分钟前
2
0
iOS 集成Facebook 第三方分享报错[FBSDKInternalUtility validateAppID]: failed for URL: "fbauth2:/" - error:

出现这种原因主要是因为info.plist文件里面没有添加一些配置文件

HOrange
16分钟前
1
0
轻松上云系列之二:其他云数据迁移至阿里云

本文档围绕如何将您其他云厂商上的数据迁移到阿里云,提供了多个场景的实践方案。 文档合集 AWS 数据迁移至阿里云 Amazon S3数据迁移到OSS 从AWS RDS迁移MySQL到阿里云RDS AWS S3迁移到OSS(...

阿里云官方博客
17分钟前
0
0
架构师的黄金证书---TOGAF

https://baijiahao.baidu.com/s?id=1590528955022289848&wfr=spider&for=pc

swingcoder
18分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部