IOS开发的一些小技巧
2015-09-21 16:05
483 查看
将图片写入模拟器相册
//日期格式化
NSDateFormatter*formatter=[[NSDateFormatteralloc]init];
//月份,天数,小时:分钟:秒上午/下午
[formattersetDateFormat:@"MMMMMMd,h:mmm:sssa"];两个类之间用数据类属性传值,传值失败,检查发现,接收类的数据存储类(nsArray/nsString...........)开辟了新的内存,导致失败;用XIB搭建uiTextField时取消键盘失效效果如右图,开始时无法用lenght取到冒号后面的nsRange,老说超出范围;后来一想前面肯定0开始的,所以,直接先将字体设置为橘色,然后取前面的文字还原颜色就好了。Google后明白,为什么提示超出范围了,应为range代表的是,起点以及从起点开始的长度范围,并不是字符串的整体长度;uiTextView遮挡键盘的处理长按手势的判定,防止出现两次修改UITextField的LAYER层时注意需要注意需要取消BorderStyle否则无效#pragmamark-如无必要不要重载视图的生命周期方法,即使写出来什么代码都没添加比如viewWillAppear,loadView........否则可能引发严重的BUG加载WEBView的拨号(此方法拨号完成后会返回应用本身)经高德经纬度测试误差±500m,其他未测NSString转NSDictionaryuitabeleviewCell添加了uitextfield无法呼出键盘,在模拟器的工具栏找到如下选项,尝试去掉第二选项(连接硬件键盘)使用高德地图API时提示“apiKey为空...”[MAMapServicessharedServices].apiKey=MAMapKey;进入此方法显示提示使用地理编码时,打印的数据是:Name="2ndRingRoadElevatedRoadYulinResidentialDistrictWuhouChengduSichuanChina";明显的是英式翻译,那么就是本地化的问题,google后得知,应该将模拟器设置为中文语言就没有问题了。Name="\U822a\U7a7a\U8def";但是需要纠正偏差才准确。选中类声明,然后右键,找到rename,把.h和.m的文件名改成重新命名的名字,然后编译一下,此时会爆路径下没有此文件的错误,那是因为xcode里虽然改了可是源文件并没有改。所以showinfinder找到源文件改为重新命名的名字编译即可通过。以上步骤是用来解决网络监测的重命名问题的。显示状态栏[xib配置无效只好手写]在viewcontroller.m文件中按需配置通常情况下是第二个红框提示有用,但是像现在这样未指明是哪个控件就比较无力,那么就需要仔细观察第一个框所在的区域,因为此区域通常包含的是引起bug的相关约束,可以直接找到成为突破口。这条黑线使用以下方法无效,另外如果cell之间过于紧密,可以考虑上图,为cell扩大高度留白,达到提高cell间距的作用。上传图片数据然后重设和重启都没有效果,最终修改如下关掉模拟器debug设置的slowanimations即可,大概是动画调试需要使用的吧。
UIImageWriteToSavedPhotosAlbum([UIImageimageNamed:@"call"],nil,nil,nil);
UIView*uiViewBuildingAddress=[[UIViewalloc]initWithFrame:self.view.frame]; uiViewBuildingAddress.backgroundColor=[UIColorblackColor]; //父视图不影响子视图背景色 uiViewBuildingAddress.backgroundColor=[UIColorcolorWithWhite:0 alpha:0.6];#pragmamark-获取view从属的viewController
-(UIViewController*)getViewController { for(UIView*next=[selfsuperview];next;next=next.superview) { UIResponder*nextResponder=[nextnextResponder]; if([nextResponderisKindOfClass:[UIViewControllerclass]]) { return(UIViewController*)nextResponder; } } returnnil; } -(UIViewController*)getViewController { while([[selfnextResponder]isKindOfClass:[UIViewControllerclass]]) { return(UIViewController*)[selfnextResponder]; } returnnil; }避免Block的RetainCycle
1.__blockASIHTTPRequest*request=[ASIHTTPRequestrequestWithURL:url]; __weakASIHTTPRequest*request2=request; 2.ASIHTTPRequest*request=[ASIHTTPRequestrequestWithURL:url]; ASIHTTPRequest*__weakrequest2=request;#pragmamark-返回当前时间精确到秒作为图片名
NSDateFormatter*formatter=[[NSDateFormatteralloc]init]; //[formattersetDateFormat:@"YYYY.MM.dd.hh.mm.ss"];//秒 //[formattersetDateFormat:@"YYYY-MM-ddhh:mm:ss:SSS"];//毫秒
[formattersetDateFormat:@"YYYYMMddhhmmssSSS"]; NSString*nsStringCurrentTime=[formatterstringFromDate:[NSDatedate]]; //NSLog(@"当前时间:%@",nsStringCurrentTime);
//日期格式化
NSDateFormatter*formatter=[[NSDateFormatteralloc]init];
//月份,天数,小时:分钟:秒上午/下午
[formattersetDateFormat:@"MMMMMMd,h:mmm:sssa"];两个类之间用数据类属性传值,传值失败,检查发现,接收类的数据存储类(nsArray/nsString...........)开辟了新的内存,导致失败;用XIB搭建uiTextField时取消键盘失效
-(BOOL)textFieldShouldReturn:(UITextField*)textField失效,代码也写好了delegate的,解决办法是双重保险,XIB文件的代理连线也需要检查。都有就OK了。属性化字符串的使用
-(BOOL)textView:(nonnullUITextView*)textView返回值文档如下描述ReturnValueYEStrueiftheoldtextshouldbereplacedbythenewtext;NOfalseifthereplacementoperationshouldbeaborted.返回yes输入的字符生效,返回no输入的字符失效使用此方法时莫名出现以下错误(xcode7,iphone5s)-[UITextEffectsWindow_adjustPointForHostedDisplay:hasTarget:inset:]:unrecognizedselectorsenttoinstance所以可以使用另外一种键盘回收方法
shouldChangeTextInRange:(NSRange)range
replacementText:(nonnullNSString*)text
{
if([textisEqualToString:@"\n"])
{
[textViewresignFirstResponder];
returnNO;
}
returnYES;
}
UIToolbar*tool=[[UIToolbaralloc]initWithFrame:CGRectMake(0,0,self.view.frame.size.width,30)];
tool.barStyle=UIBarStyleDefault;
UIBarButtonItem*keyReturn=[[UIBarButtonItemalloc]initWithBarButtonSystemItem:(UIBarButtonSystemItemDone
)target:self
action:@selector(keyBoardReturn)];
//多个操作按钮需使用空格按钮
tool.items=@[keyReturn];
reason.inputAccessoryView=tool;
/**为textview设置一个附加视图,附加视图添加取消键盘响应的方法即可获取设备此存及物理分辨率
*textview回收键盘
*/
-(void)keyBoardReturn
{
[reasonresignFirstResponder];
}
NSString*height=[NSStringstringWithFormat:@"%d",(NSInteger)[UIScreenmainScreen].currentMode.size.height];屏蔽NSLog
NSString*width=[NSStringstringWithFormat:@"%d",(NSInteger)[UIScreenmainScreen].currentMode.size.width];#defineCgrectUIScreen[UIScreenmainScreen].bounds#defineUIScreenWide[UIScreenmainScreen].bounds.size.width#defineUIScreenHeight[UIScreenmainScreen].bounds.size.height
#defineNSLog(...){};#endif获取UItableView的某个Cell,千万注意红色的部分,不要用self直接调用方法(不要问LZ为什么),是用UITableView的实例来调用的
/**地图中两个经纬度间的距离
*拨号
*
*@paramnumber
*/
-(void)ABCallPhone:(id)number
{
NSURL*url=[NSURLURLWithString:[NSStringstringWithFormat:@"tel:%@",number]];
UIWebView*web=[UIWebViewnew];
[webloadRequest:[NSURLRequestrequestWithURL:url]];
[self.viewaddSubview:web];
}
+(MAMapServices*)sharedServices;/*!确保绑定apiKey写在第一位位置即可。打印应用的缓存路径
@briefAPIKey,在创建MAMapView之前需要先绑定key.
*/
@property(nonatomic,copy)NSString*apiKey;
NSString*path=[NSSearchPathForDirectoriesInDomains(NSCachesDirectory,NSUserDomainMask,YES)lastObject];PLIST文件的一般使用
NSLog(@"path:%@",path);
//创建或者写入**文件绝对路径,如果文件有数据直接使用即可storyBoard代码跳转1.通过storyBoard里已有的segue,设置segue的Identifier.
NSString*filepath=[(NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES)[0])stringByAppendingPathComponent:@"userInform.plist"];
NSDictionary*userInform=[NSDictionarydictionaryWithContentsOfFile:filepath];[userInformwriteToFile:filepath
atomically:YES];
[selfperformSegueWithIdentifier:@"SegueName"sender:self];2.通过storyBoard里设置storyBoardID.
UIStoryboard*uiStoryboardMain=[UIStoryboardstoryboardWithName:@"StoryboardMain" bundle:nil];UIViewController*uiViewController=[uiStoryboardMaininstantiateViewControllerWithIdentifier:@"tabBarController"];[selfpresentViewController:uiViewController注意勾选此选项
animated:YES
completion:^
{
}];
-(void)locationManager:(CLLocationManager*)manager为视图添加背景图片并且节约内存
didUpdateLocations:(NSArray*)locations
{if(locations.count>0)
{
CLLocation*latesLocation=[locationslastObject];
//NSLog(@"latesLocation:%@",latesLocation);
//mapCenter(latesLocation.coordinate);
CLGeocoder*geocoder=[[CLGeocoderalloc]init];
[geocoderreverseGeocodeLocation:latesLocation
completionHandler:^(NSArray*placemarks,NSError*error)
{
if(placemarks.count>0)
{
CLPlacemark*latesPlaceMark=(CLPlacemark*)[placemarkslastObject];
NSLog(@"latesPlaceMark.addressDictionary:%@",(latesPlaceMark.addressDictionary[@"FormattedAddressLines"])[0]);
}
}];}
}
self.view.layer.contents=(id)[UIImageimageNamed:@"table"].CGImage;对类进行重命名
/**UITableViewStyleGrouped头部多余一部分怎么取消呢
*状态栏风格设置
*
*@return
*/
-(UIStatusBarStyle)preferredStatusBarStyle
{
returnUIStatusBarStyleLightContent;
}/**
*显示状态栏
*
*@return
*/
-(BOOL)prefersStatusBarHidden
{
returnNO;
}
UIView*view=[[UIViewalloc]init];以空白视图替换头部视图设置tabbaritem的图片尺寸最好是32*32pixels,否则会使图片溢出或者遮挡住item的文字
view.frame=CGRectMake(CGFLOAT_MIN,CGFLOAT_MIN,CGFLOAT_MIN,CGFLOAT_MIN);
view.backgroundColor=[UIColorclearColor];
[tableViewsetTableHeaderView:view];
[tableViewsetTableFooterView:view];
对UIDatePicker选择的日期进行format。限制输入长度
1)当你的format格式是
NSDateFormatter*dateFormatter=[[[NSDateFormatteralloc]init]autorelease];
[dateFormattersetDateFormat:@"yyyy-MM-ddHH:mm:ss"];//这里是用大写的H
NSString*dateStr=[dateFormatterstringFromDate:date];
你获得就是24小时制的。
2)当你的format格式用的是
[dateFormattersetDateFormat:@"yyyy-MM-ddhh:mm:ss"];//这里是用小写的h
你获得的就是12小时制的。
-(BOOL)textField:(nonnullUITextField*)textField模拟器上使用CMD+shift+h可以达到HOME键的效果,多次使用可达到多次使用HOME键的效果约束排错有时候即使xib中没有约束错误,可是运行时依旧会提示约束错误
shouldChangeCharactersInRange:(NSRange)range
replacementString:(nonnullNSString*)string
{
//NSLog(@"%@",string);
//可变
NSMutableString*string0=[NSMutableStringstringWithString:textField.text];
//替换成字符形式这是必须的步骤
[string0replaceCharactersInRange:range
withString:string];
if(string0.length>11)
{
returnNO;
}returnYES;
}
/**LZ使用此方法是在压缩图片达到最小大小后仍然无法满足需要,所以就先缩小之后再压缩就可以了。
*按比例缩小图片
*
*@paramimage
*@paramnewSize
*
*@return
*/
-(NSData*)tailorImage:(UIImage*)image
scaledToSize:(CGSize)newSize;
{
UIGraphicsBeginImageContext(newSize);
[imagedrawInRect:CGRectMake(0,0,newSize.width,newSize.height)];
UIImage*newImage=UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
returnUIImageJPEGRepresentation(newImage,0.1);
}
CLLocationCoordinate2Dcoordinate0=CLLocationCoordinate2DMake(coordinate.latitude,coordinate.longitude+0.02);去掉每个cell下面的黑线
//高德地图设置坐标居中会向右偏移部分,需要手动矫正
[mapViewsetCenterCoordinate:coordinate0
animated:YES];
self.tableView0.separatorStyle=UITableViewCellSeparatorStyleNone;此条线具体代表什么不太清楚,但是可以通过留白的方式对它进行右移,使它移除屏幕外达到去除的效果
NSString*photo=[imageDatabase64EncodedStringWithOptions:NSDataBase64EncodingEndLineWithLineFeed];使用socket上传图片数据时,直接上传后台接受到乱码,最后进行base64编码发送ok使用模拟器的时候运行十分的缓慢像这样,切换动画十分的明显
相关文章推荐
- ios 资料
- XCode7和ios9的兼容和更新问题解决方案
- ios数据存储之归档
- iOS 之旅--视频收获笔记(持续更新)
- iOS#import与@class的区别
- IOS学习笔记——Obj-c中实例方法与类方法的区别
- iOS—NSLog各种打印格式
- iOS--进阶知识--Runtime
- Xcode7--坑无法运行iOS9以下的模拟器
- 蓝牙打印小票
- iOS后台保持(whose view is not in the window hierarchy)
- iOS可用内存限制
- iOS CABasicAnimation 缩放动画
- iOS WKWebView
- ios数据存储之偏好设置
- iOS学习之iOS沙盒(sandbox)机制和文件操作(二)
- iOS语法基础
- iOS开发日记22-CocoaPods
- iOS9 兼容那点事
- ios开发者修养