干货! iOS开发中的实用小技巧(上)

tip 1 : 给UIImage添加毛玻璃效果

func blurImage(value:NSNumber) -> UIImage {

let context = CIContext(options:[KCIContextUseSoftwareRenderer:true])

let ciImage = CoreImage.CIImage(image:self)

let blurFilter = CIFilter(name:"CIGassianBlur")

blurFilter?.setValue(ciImage, forKey:KCIInputImageKey)

blurFilter?.setValue(value, forKey:"inputRadius")

let imageRef = context.createCGImage((blurFilter?.outputImage)!, fromRect:(ciImage?.extent)!)

let newImage = UIImage(CGImage:imageRef)

return newImage

说到这里推荐下我自己建的iOS开发学习群:680565220,群里都是学ios开发的,如果你正在学习ios ,小编欢迎你加入,今天分享的这个案例已经上传到群文件,大家都是软件开发党,不定期分享干货(只有iOS软件开发相关的),包括我自己整理的一份2017最新的iOS进阶资料和高级开发教程,欢迎进阶中和进想深入iOS的小伙伴。

}

value : value代表毛玻璃效果的程度

核心内容:let blurFilter = CIFilter(name:"CIGassianBlur") 使用滤镜工具

tip 2 : 图片压缩

func imageCompress(targetWidth:CGFloat) -> UIIMage {

let targetHeight = targetWidth/width*height

UIGraphicsBeginImageContext(CGSizeMake(targetWidth,targetHeight))

self.drawInRect(CGRectMake(0,0,targetWidth,targetHeight))

let newImage:UIImage = UIGraphicsGetImageFromCurrentImageContext()

UIGrapicsEndImageContext()

return newImage

}

这里是按原UIImage比例做压缩所以:let targetHeight = targetWidth/width*height

tip 3 : SVN & Git 用法总结

一:SVN

A. 项目经理:1.创建项目—CheckIn

2.设置项目人员

B.工作人员:1.CheckOut 获取项目的完整副本,此工作只需要做"一次"

2. 工作写代码....

3.阶段性工作完成后,Commit(提交) 将自己修改的文件,上传到服务器

每天下班前一定要做一次能够编译的提交!

4.定期Update项目,从服务器将最新的内容更新到本地,每天上班第一件事情一定要做的事情!

二. Git

A.项目经理:1.创建项目push

2.设置项目人员

B. 工作人员:1.Pull从服务器下拉最新的本版

2.Commit是将修改过的代码提交至本地的代码库

3.每天下班前Push自己当前的代码到服务器

4.每天上班前从服务器Pull最新的内容

三. M / A 文件更新

对于文件夹svn支持并不好,需要在工具下选定文件夹commit

对应文件选定文件commits

由于过去在公司多半时间是做独立开发,最多人的时候也是两个人做开发,所以协作工具用的少,但是不断的关注着两种代码仓库管理工具,总结了一些tip,还有待实践验证,吐槽吧......

tip 4: UINavigationController下的坐标系

iOS 9 前:

navigationBar 如果设置了背景图片,那么可视化坐标会从navgationbar下面开始

self.navigationController?.navigationBar.setBackgroundImage(UIImage(named:"nav"), forBarMetrics:UIBarMetrics.Default)

iOS 9 后 : 坐标从状态栏下面开始

tip 5 : C字符串转成NSString & NSString转成C字符串

const char *cString = "CString";

C字符串转成NSString : NSString *str = [NSString stringWithUTF8String:cString];

NSString * str = @"NSString";

NSString转成C字符串 : const char *cString = [str UTF8String];

tip 6 : OC & Swift 代码块(语法糖)

Objective-C :

UILabel *label1 = ({

UILabel *label = [UILabelnew];

[self.view addSubview:label];

label.frame=CGRectMake(100,100,100,45);

label.backgroundColor= [UIColor redColor];

label.text=@"大家好1";

label;

});

UILabel*label2 = ({

UILabel*label = [UILabel new];

[self.view addSubview:label];

label.frame=CGRectMake(100,160,100,45);

label.backgroundColor= [UIColor redColor];

label.text=@"大家好2";

label;

});

UILabel*label3 = ({

UILabel*label = [UILabel new];

label.frame=CGRectMake(100,250,100,45);

label.backgroundColor= [UIColor redColor];

label.text=@"大家好3";

label;

});

[self.viewaddSubview:label3];

({

UILabel *label = [UILabel new];

[self.view addSubview:label];

label.frame=CGRectMake(100,310,100,45);

label.backgroundColor= [UIColor redColor];

label.text=@"大家好4";

});

Swift:

letlabel1:UILabel= {

let label =UILabel()

self.view.addSubview(label)

label.frame=CGRectMake(100,100,100,45)

label.backgroundColor=UIColor.redColor()

label.text="大家好"

return label

}()

let label2:UILabel= {

let label =UILabel()

label.frame=CGRectMake(100,200,100,45)

label.backgroundColor=UIColor.redColor()

label.text="大家好"

return label

}()

self.view.addSubview(label2)

使用语法糖的好处就是拷贝代码时只需做少许的修改就可以达到目的,如上面的栗子,想要创建多个label,只要赋值粘贴,改一处,也就是对象名称就可以轻松完成!

tip 7 : 数据持久化方式归纳总结

数据缓存方式选择:

1: fmdata数据库(增删改查) --数据需要:增删改查

2: coreData --数据需要:增删改查

3:序列化(NSUserDefault) --状态、偏好设置、默认选项

4:单独.plist --列表数据,城市信息等

5:单独.json文件 --页面列表数据

6: realm框架(增删改查) --数据需要:增删改查

7: FastCoder 某“强哥”推荐,哈哈哈!

tip 8 : 清理Profiles证书文件

~/Library/MobileDevice/Provisioning Profiles

由于平时会负责多个项目的上线管理或是开发工作,因此MAC中有很多签名文件,有时候都分不清东西南北,一不做,二不休,前往这个目录下,将文件删个精光,调试的时候用到证书再update一下当前项目的证书即可

tip 9 : 拿到当前屏幕所看到的viewController

Objective-c版本:

- (UIViewController *)getAppRootViewController

{

UIViewController *appRootVC = [UIApplication sharedApplication].keyWindow.rootViewController;

UIViewController *topVC = appRootVC;

while (topVC.presentedViewController) {

topVC = topVC.presentedViewController;

}

return topVC;

Swift版本:

func getAppRootViewController()->UIViewController?{

vartopVC=UIApplication.sharedApplication().keyWindow?.rootViewController

while topVC?.presentedViewController!=nil{

topVC=topVC?.presentedViewController

}

return topVC?

}

tip 10 : 制作pch文件

步骤:

1、新建iOS->Other->PCH File

2、targets->BuildSetting->Prefix Header->设置$(SRCROOT)/文件在工程中的路径

3、pch能像以前一样正常使用

如:$(SRCROOT)/FirstProject/PrefixHeader.pch

FirstProject : pch路径中的最后一个拓展名

PrefixHeader.pch: 是pch文件名

简介:/Users/ly/Desktop/FirstProject/FirstProject

tip 11 : 设置UINavigationController title

当 UIViewController作为UINavigationController的根视图控制器的时候,将这个Nav(root)赋给 tabBarController时,

这样写:

root.title = @“title”;

那么 :self.naviagtionItem.title 会显示 title

同时 :nav.tabBarItem.title 也会显示 title

tip 12 : 判断UIScrollView是横向滚动还是竖向滚动

- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer*)gestureRecognizer {

if([gestureRecognizerisKindOfClass:[UIPanGestureRecognizerclass]]) {

CGPointvelocity = [(UIPanGestureRecognizer*)gestureRecognizervelocityInView:gestureRecognizer.view];

BOOLisHorizontalPanning =fabsf(velocity.x) >fabsf(velocity.y);

return isHorizontalPanning;

}

returnYES;

}

tip 13 : 监听 backBarButtonItem 返回事件

github上搜: UIViewController+BackButtonHandler 开源项目

tip 14 : 让一个view透明度失效

self.view.backgroundColor=UIColor(colorLiteralRed:255.0/255, green:255.0/255, blue:255.0/255, alpha:0.3)

let subView = UIView()

subView.tintColor=UIColor.whiteColor()//不透明了

self.view.addSubview(subView)

tip 15 : 从ipod库中读出音乐文件

// 从ipod库中读出音乐文件

MPMediaQuery*everything=[[MPMediaQueryalloc]init];

//读取条件

MPMediaPropertyPredicate*albumNamePredicate=[MPMediaPropertyPredicatepredicateWithValue:[NSNumbernumberWithInt:MPMediaTypeMusic]forProperty:MPMediaItemPropertyMediaType];

[everythingaddFilterPredicate:albumNamePredicate];

NSLog(@"Loggingitemsfromagenericquery...");

NSArray*itemsFromGenericQuery=[everythingitems];

for(MPMediaItem*songinitemsFromGenericQuery){

NSString*songTitle=[songvalueForProperty:MPMediaItemPropertyTitle];

NSLog(@"%@",songTitle);

}

tip 16 : 广告标示符(adId) & adfv标示符的那些事

1.如何识别一个应用安装在同一个设备上呢?

2.如何识别一个企业的应用安装在同一个设备上呢?

苹果给我们提供了advertisingIdentifier 来解决问题1;

只要是同一台设备,那么advertisingIdentifier就是一样的

但是如果在设置-隐私-广告那里关掉这个权限或是还原设备的话,就没办法了哭死去吧

苹果给我们提供了identifierForVendor 来作为一个企业的app标示符

比如: com.game.yoyo

com.game.xoxo

只要在同一台设备上,那么identifierForVendor 是一样的

如果:com.game.yoyo

com.buyer.yoyo

不管是不是同一个应用identifierForVendor 都是不一样的

上代码:

广告id:

#import

//每个设备有唯一一个,如果重置广告或设置-隐私-关闭广告就会关闭更换

NSString*adId = [[[ASIdentifierManagersharedManager]advertisingIdentifier]UUIDString];

企业id:

NSString*idfv = [[[UIDevicecurrentDevice]identifierForVendor]UUIDString];

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,539评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,594评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,871评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,963评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,984评论 6 393
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,763评论 1 307
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,468评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,357评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,850评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,002评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,144评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,823评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,483评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,026评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,150评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,415评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,092评论 2 355

推荐阅读更多精彩内容