iOS 开发中收集的一些比较实用的小方法(持续更新)
2017-03-16 本文已影响23人
ZPCoder
1.解决建立在scrollView上及其子类上的按钮的点击效果不明显的方法(_talbelView为scrollView的子类视图)
_tableView.delaysContentTouches = NO;
if ([UIDevice currentDevice].systemVersion.intValue >= 8) {
for (UIView *currentView in _tableView.subviews) {
if ([currentView isKindOfClass:[UIScrollView class]]) {
((UIScrollView *)currentView).delaysContentTouches = NO;
break;
}
}
}
2.影藏顶部手机状态栏
- (BOOL)prefersStatusBarHidden{
return YES;
}
3.解决 AFNetworking 中get请求中拼接汉子报错问题(被遗弃了 ,但还是可以实用)
url = [url stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
4.iOS10 隐私权限设置问题(Crash)
<key>NSVideoSubscriberAccountUsageDescription</key>
<string></string>
<key>NSBluetoothPeripheralUsageDescription</key>
<string>蓝牙权限</string>
<key>NSSpeechRecognitionUsageDescription</key>
<string>语音识别权限</string>
<key>NSSiriUsageDescription</key>
<string>Siri权限</string>
<key>NSRemindersUsageDescription</key>
<string></string>
<key>NSPhotoLibraryUsageDescription</key>
<string>相册权限</string>
<key>kTCCServiceMediaLibrary</key>
<string></string>
<key>NSMotionUsageDescription</key>
<string>运动权限</string>
<key>NSMicrophoneUsageDescription</key>
<string>麦克风权限</string>
<key>NSAppleMusicUsageDescription</key>
<string>音乐权限</string>
<key>NSLocationWhenInUseUsageDescription</key>
<string>地理位置权限</string>
<key>NSLocationUsageDescription</key>
<string>地理位置权限</string>
<key>NSLocationAlwaysUsageDescription</key>
<string>地理位置权限</string>
<key>NSHomeKitUsageDescription</key>
<string></string>
<key>NSHealthUpdateUsageDescription</key>
<string>健康权限</string>
<key>NSHealthShareUsageDescription</key>
<string>健康权限</string>
<key>NSContactsUsageDescription</key>
<string>通讯录权限</string>
<key>NSCameraUsageDescription</key>
<string>摄像头权限</string>
<key>NSCalendarsUsageDescription</key>
<string>日历权限</string>
5.缩放图片的方法
#pragma mark- 缩放图片
-(UIImage *)scaleImage:(UIImage *)image toScale:(float)scaleSize
{//scaleSize 为缩小的倍数,高和宽都缩小这个倍数,相当于整体大小缩小他的平方陪,需要的话,可以在这里边吧scaleSize开方
UIGraphicsBeginImageContext(CGSizeMake(image.size.width*scaleSize,image.size.height*scaleSize));
[image drawInRect:CGRectMake(0, 0, image.size.width * scaleSize, image.size.height *scaleSize)];
UIImage *scaledImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return scaledImage;
}
6.延迟执行的方法
[self performSelector:@selector(FullTimerAction) withObject:nil afterDelay:3];
7.//获取状态栏的高度
CGFloat statheight = [[UIApplication sharedApplication] statusBarFrame].size.height;
8.屏幕截图 (两种)
1.截取为UIView格式的
// - (UIView *)snapshotViewAfterScreenUpdates:(BOOL)afterUpdates NS_AVAILABLE_IOS(7_0);
上面是屏幕截图的方法
- (void)viewDidLoad {
[super viewDidLoad];
self.iamgeView = [[UIImageView alloc]initWithFrame:CGRectMake(0, 200, self.view.frame.size.width, 200)];
UIImage *image =[ UIImage imageNamed:@"112"];
self.iamgeView.image = image;
[self.view addSubview:self.iamgeView];
UIView *snapView = [self.iamgeView snapshotViewAfterScreenUpdates:YES];
snapView.frame =CGRectMake(0, 400, self.view.frame.size.width, 200);
[self.view addSubview:snapView];
}
2.截取为UIImage格式的
-(UIImage *)cutOutViewWithView:(UIView*)TOP_VIEW
{
UIGraphicsBeginImageContextWithOptions(TOP_VIEW.frame.size, NO, [[UIScreen mainScreen] scale]);
[TOP_VIEW.layer renderInContext:UIGraphicsGetCurrentContext()];
// 此方法,除却iOS8以外其他系统都OK
[TOP_VIEW drawViewHierarchyInRect:TOP_VIEW.bounds afterScreenUpdates:NO];
UIImage *snapshot = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return snapshot;
}
9.使得控件旋转的方法(如下图)
UILabel * LabelMonth = [[UILabel alloc]initWithFrame:self.frame];
LabelMonth.transform = CGAffineTransformMakeRotation(M_PI * 0.3);
[self addSubview:LabelMonth];
屏幕快照 2016-08-16 15.58.07.png
10.tableView中cell的高度自适应
self.tableView.estimatedRowHeight = 68;
self.tableView.rowHeight = UITableViewAutomaticDimension;
11.数据写入本地和读取比较实用的方法
//数组写入
- (void)writeToWithMemory:(NSMutableArray *)array {
// 沙盒路径
NSString *path=[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)lastObject];
// 文件路径
NSString *fileName=[path stringByAppendingPathComponent:@"userInfo.plist"];
BOOL isWrite = [array writeToFile:fileName atomically:YES];
if (isWrite) {
[self createAlerViewWithTitle:@"友情提示" message:@"成功"];
}else{
[self createAlerViewWithTitle:@"友情提示" message:@"失败"];
}
}
//数组读取
- (NSMutableArray *)readArray {
NSString *path = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)lastObject] stringByAppendingPathComponent:@"userInfo.plist"];
NSMutableArray *array = [[NSMutableArray alloc] initWithContentsOfFile:path];
return array;
}
//创建弹窗
-(void)createAlerViewWithTitle:(NSString *)title message:(NSString *)message{
UIAlertView *alert = [[UIAlertView alloc]initWithTitle:title message:message delegate:self cancelButtonTitle:@"确定" otherButtonTitles: nil];
[alert show];
}
12.监听键盘的弹出后改变控件的frame
// 添加监听,键盘的弹出
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardShow:) name:UIKeyboardWillShowNotification object:nil];
// 键盘的收回
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardHidden:) name:UIKeyboardWillHideNotification object:nil];
#pragma mark - 键盘的回调方法
//弹出
-(void)keyboardShow:(NSNotification *)notification{
// 得到键盘的高度
CGRect keyBoardRect =[[notification.userInfo objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue];
// 键盘高度
float keyboardHeight =keyBoardRect.size.height;
CGRect bounds=self.view.bounds;
self.view.bounds=CGRectMake(0, keyboardHeight, bounds.size.width, bounds.size.height);
}
//回收
-(void)keyboardHidden:(NSNotification *)notification{
self.view.bounds=CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height);
}
13.毛玻璃效果
//毛玻璃效果
UIBlurEffect *effect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleLight];
UIVisualEffectView *visualEffectView = [[UIVisualEffectView alloc]initWithEffect:effect];
visualEffectView.alpha = 0.9;
[visualEffectView setFrame:self.view.frame];
[self.view addSubview:visualEffectView];
14.视图转换为图片格式方法
//将视图转换为UIImage格式
- (UIImage*) imageWithUIView:(UIView*) view
{
UIGraphicsBeginImageContext(view.bounds.size);
CGContextRef ctx = UIGraphicsGetCurrentContext();
[view.layer renderInContext:ctx];
UIImage* tImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return tImage;
}
15.模态视图--从N级退出到1级视图
if ([self respondsToSelector:@selector(presentingViewController)]){
[self.presentingViewController.presentingViewController dismissViewControllerAnimated:YES completion:nil];
}
else {
[self.parentViewController.parentViewController dismissViewControllerAnimated:YES completion:nil];
}