1.模拟器语言切换
我们用到国际化的时候,需要调试不同语言的版本,所以切换语言的话模拟器来回切换很麻烦。简单方法:
xode--->Product--->Scheme--->Edit Scheme--->Run--->Application Language&Region
在这里选择所需要的语言,这样再运行的时候,模拟器语言就变成了所选的。
2.armv7 arm64等的区别
armv6, armv7, armv7s是ARM CPU的不同指令集,原则上是向下兼容的。如iPhone4S CPU支持armv7, 但它同时兼容armv6,只是使用armv6指令可能无法充分发挥它的特性。同理iPhone5 CPU支持armv7s,它虽然也兼容armv7,但是却无法进行相关的优化。
armv6设备:iPhone, iPhone2, iPhone 3G,第一代、第二代iPod Touch
armv7设备:iPhone 3GS, iPhone 4, iPhone 4S
iPad , iPad 2, the new iPad
iPod Touch 3G, iPod Touch 4
armv7s设备:iPhone 5 , the new ...
只有在目标设备上,才会执行设备对应的指令集。
如果在工程Build Setting的Architectures 中的“Build Active Architecture Only”选择为YES,则即使你设置成armv7 , armv7s同时支持,也只会编译对应指令集的包;若选择NO,则编译器会整合两个指令集到一起,此时的包比较大,但是能在iPhone5上使用armv7s的优化,同时也能适配老的设备。一般都是Debug时“Build Active Architecture Only”选择YES,用当前的架构看代码逻辑是否有问题;而在Release时选择NO,来适配不同的设备。
此外,模拟器并不运行arm代码,软件会被编译成x86可以运行的指令。所以生成静态库时都是会先生成两个.a,一个是i386的用于在模拟器运行,另一个是在真实设备上运行的,然后再用命令将两个.a合并成一个。
因此如果一些程序中使用的静态库不支持armv7s,而你的工程支持armv7s时,就会出现“xxxx does not contain a(n) armv7s slice:xxxxx for architecture armv7s"的编译错误,想要解决这个问题,有两个方法:
1.如果是开源的,能够找到源代码,则可以用源代码重新打一个支持armv7s的libaray, 或者在工程中直接使用源代码,而不是静态库。
2.如果不是开源的,要么就坐等第三方库的支持,要么就暂时让你的工程不支持armv7s。
3. 获取类名
很方便的调试及日志工具
NSLog(@"class name----> %@",NSStringFromClass([self class]));
4.图片拼接
这个挺实用的
前提:需要添加Framework:CoreGraphics.framework
- (UIImage *) combine:(UIImage*)leftImage :(UIImage*)rightImage {
CGFloat width = leftImage.size.width *2;
CGFloat height = leftImage.size.height;
CGSize offScreenSize = CGSizeMake(width, height);
UIGraphicsBeginImageContext(offScreenSize);
CGRect rect = CGRectMake(0,0, width/2, height);
[leftImage drawInRect:rect];
rect.origin.x += width/2;
[rightImage drawInRect:rect];
UIImage* imagez = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return imagez;
}
5.const char *
转 char *
char *newchar = (char *)malloc(sizeof(char));
memset(newchar, 0, sizeof(char));
strcpy(newchar, (把你return的那个放进去));
6.根据秒数获取时间
好多应用中时间的实用都是用秒数来实现的,那么我怎么怎么把秒数来转为一般的时间格式呢?
//根据秒数获得时间
- (NSString *)bySecondGetDate:(NSString *)second{
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
NSString *dateLoca = [NSString stringWithFormat:@"%@",second];
NSTimeInterval time=[dateLoca doubleValue];
NSDate *detaildate=[NSDate dateWithTimeIntervalSince1970:time];
NSString *timestr = [formatter stringFromDate:detaildate];
return timestr;
}
6. 汉字转拼音
//“我是中国人” 转成拼音并取首字母
-(void)hanziToString{
NSString *hanziText = @"我是中国人";
if ([hanziText length]) {
NSMutableString *ms = [[NSMutableString alloc]initWithString:hanziText];
if (CFStringTransform((__bridge CFMutableStringRef)ms, 0, kCFStringTransformMandarinLatin, NO)) {
NSLog(@"pinyin: %@", ms);
}
if (CFStringTransform((__bridge CFMutableStringRef)ms, 0, kCFStringTransformStripDiacritics, NO)) {
NSLog(@"pinyin: %@", ms);
}
NSString *name=[NSString stringWithString:ms];
name=[self getFirstWord:name];
NSLog(@"First word is : %@",name);
}
}
-(NSString *)getFirstWord:(NSString *)string {
NSString *firstWord=[string substringToIndex:1];
return firstWord;
}
7.获得当前系统语言
- (void)getCurrentLanguage{
NSString*currentLanguage = [[NSLocale preferredLanguages]objectAtIndex:0];
NSLog(@"当前系统语言:%@", currentLanguage);
}
8.使屏幕一直保持唤醒状态(就是不自动黑屏)、
加一句代码
[[UIApplication sharedApplication] setIdleTimerDisabled:YES];
9.在Xcode中,文件名后小方框中的A(M或C)表示的含义
这种标识是做版本控制用的,表示在版本控制中,自上一次提交以来,文件做了修改。貌似只有在带有版本控制的项目代码中才会显示,也就是说你的项目使用了SVN、GIT等工具后,会在Xcode中识别出来。
'A' 新增,表示该文件是新添加的,已受SVN管理,需要 commit.(右键该文件 -> source control -> commit selected file...)
'D' 删除,表示该文件在服务器上已被删除,这时update的话,可删除本地的文件。
'M' 修改,表示该文件已被修改,需要 commit.(右键该文件 -> source control -> commit selected file...)
'R' 替代,表示该文件被替换。
'C' 冲突,表示该文件与服务器的文件冲突。
'I' 忽略,表示该文件被忽略或未识别
'?' 未受控,表示该文件是新添加的,并且脱离了SVN的管理,首先需要add,然后 commit.(右键该文件 -> source control -> Add,这样该文件的标记就变为 “A”,然后在 commit
'!' 丢失,一般是将受控文件直接删除导致
10.动态加载类(NSClassFromString)
一般说来,下面这两种写法
id classNew = [[NSClassFromString(@"MyTestClass") alloc] init];
id classNew = [[MyTestClass alloc] init];
是一样的。但是当你项目中没有MyTestClass这个类的时候,上面的会返回一个空对象,而下面的则是报错。
使用NSClassFromString
的好处是不需要插入这个类的头文件,也防止link到不存在的Framework
11.图片设置成圆形
self.imageView = [[UIImageView alloc] initWithFrame:CGRectMake(10, 10, 100, 100)] ;
self.imageView.layer.cornerRadius = 100/2 ; // 设置半径
self.imageView.layer.masksToBounds = YES ; // 边界是否允许截取
同理,一些view控件的圆角都可以这样做
view.layer.cornerRadius =5;
12.string转UTF8编码
好多时候我们会用到UTF8编码去传递一些东西,比如服务器数据提交
NSString *string=@"北京";
string=[string stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]
13.模拟器上的放大缩小手势快捷键
一般在对图片和地图操作的时候,会用到放大缩小的手势
模拟器的快捷键是:cmd+alt+左键
14.改变label部分字体颜色
像图中这样。代码很简单
myLabel=[[UILabel alloc]initWithFrame:CGRectMake(10, 50, 300, 30)];
myLabel.text=@"今天天气好晴朗,处处好风光";
[self.view addSubview:myLabel];
NSMutableAttributedString *hintString=[[NSMutableAttributedString alloc]initWithString:@"今天天气好晴朗,处处好风光"];
//获取要调整颜色的文字位置,调整颜色
NSRange range1=[[hintString string]rangeOfString:@"天气好"];
[hintString addAttribute:NSForegroundColorAttributeName value:[UIColor greenColor] range:range1];
NSRange range2=[[hintString string]rangeOfString:@"处处好"];
[hintString addAttribute:NSForegroundColorAttributeName value:[UIColor redColor] range:range2];
myLabel.attributedText=hintString;
想封装一下会更方便一些。
-(void)addControllers{
myLabel=[[UILabel alloc]initWithFrame:CGRectMake(10, 50, 300, 90)];
myLabel.numberOfLines=0;
[self.view addSubview:myLabel];
NSString *text=@"这一定是一个非常长的句子,请相信我,这个句子我也不知道是怎么想出来的,将就着用吧。哇嘎嘎嘎。";
NSArray *textArray=[NSArray arrayWithObjects:@"定是",@"常长",@"信我",@"道是",@"就着", nil];
NSArray *colorArray=[NSArray arrayWithObjects:[UIColor redColor],[UIColor greenColor],[UIColor yellowColor],[UIColor purpleColor],[UIColor blueColor], nil];
[self changeColorInLabel:myLabel AndText:text WihtTextArray:textArray AndColorArray:colorArray];
}
-(void)changeColorInLabel:(UILabel *)label AndText:(NSString *)string WihtTextArray:(NSArray *)textArray AndColorArray:(NSArray *)colorArray{
NSMutableAttributedString *hintString=[[NSMutableAttributedString alloc]initWithString:string];
for (int i=0; i
如果连参数你都觉得麻烦。。。。请自行解决。。。。