iOS小总结以及犯的错误
2017-08-01 本文已影响43人
曹小宇丶
早就想弄一个出来,直到今天才真正写出来... 以后有什么不懂得或者需要记录的会发到这里面。持续更新!
方法:
//系统宽
#define SCREEN_WIDTH [[UIScreen mainScreen] bounds].size.width
//系统高
#define SCREEN_HEIGHT [[UIScreen mainScreen] bounds].size.height
#define BASE_WIDTH 414.0f
#define BASE_HEIGHT 736.0f
//按比例计算的宽
#define UNIT_WIDTH(NSInteger) (double)NSInteger / BASE_WIDTH * SCREEN_WIDTH
//按比例计算的高
#define UNIT_HEIGHT(NSInteger) (double)NSInteger / BASE_HEIGHT * SCREEN_HEIGHT
//系统字体大小
#define SYS_FONT(num) [UIFont systemFontOfSize:UNIT_HEIGHT(num)]
//弱引用
#define WS(type) __weak typeof(type) weak##type = type;
//字典排序
NSArray*sortArray = [keyArray sortedArrayUsingComparator:^NSComparisonResult(id_Nonnull obj1,id_Nonnull obj2) {
return[obj1 compare:obj2 options:NSNumericSearch];
}];
// 截屏
-(UIImage *)captureImageFromView:(UIView *)view{
CGRect screenRect = [view bounds];
UIGraphicsBeginImageContextWithOptions((screenRect.size), YES, 0);
CGContextRef ctx = UIGraphicsGetCurrentContext();
[view.layer renderInContext:ctx];
UIImage * image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return image;
}
//用的时候
UIImage *image = [self captureImageFromView:self.view];
//保存到相册
#import <AssetsLibrary/AssetsLibrary.h>
ALAssetsLibrary * library = [ALAssetsLibrary new];
NSData * data = UIImageJPEGRepresentation(self.image, 1.0);
[library writeImageDataToSavedPhotosAlbum:data metadata:nil completionBlock:nil];
//点击截屏图片的时候让手势失效,也就是说点击的时候图片时点击不了的。
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch{
if ([touch.view isDescendantOfView:self.viewForBack (你自己的view)]) {
return NO;
}
return YES;
}
//webview加载html页面 字体过小的解决办法
- (void)webViewDidFinishLoad:(UIWebView *)webView {
[webView stringByEvaluatingJavaScriptFromString:@"document.getElementsByTagName('body')[0].style.webkitTextSizeAdjust= '100%'"];
}
//文字两头对齐实现方法
第一步:新建一个名为labelForText(名称自己取)的UILabel的类并#import <CoreText/CoreText.h>
第二步:在类的.h出写调用方法 - (void)changeLabel; 并在.m文件里复制下面的方法
- (void)changeLabel{
CGRect textSize = [self.text boundingRectWithSize:CGSizeMake(self.frame.size.width, MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingTruncatesLastVisibleLine |NSStringDrawingUsesFontLeading attributes:@{NSFontAttributeName : self.font} context:nil];
CGFloat margin = (self.frame.size.width - textSize.size.width) / (self.text.length - 1);
NSNumber *number = [NSNumber numberWithFloat:margin];
NSMutableAttributedString *attributeString = [[NSMutableAttributedString alloc]initWithString:self.text];
[attributeString addAttribute:(id)kCTKernAttributeName value:number range:NSMakeRange(0, self.text.length - 1)];
self.attributedText = attributeString;
}
第三步:引用 #import “labelForText”
labelForText *label = [[labelForText alloc] initWithFrame:CGRectMake(20, 180, 120, 30)];
label.text = @"测试一下试试";
label.textColor = [UIColor orangeColor];
[label changeLabel];
[self.view addSubview:label];
总结:
1.项目的总体采用的颜色最好设置成宏定义,方便以后直接改。
2.懒加载之后,所有用到的地方都需要以self开头,不然不会调用懒加载里的东西。
3.升级到xcode8之后,运行的时候会出现一堆file missing警告,消除的办法就是Xcode->Preferences->Source->Enable Source Control 把勾勾去掉,之后警告就会消失。(但并不推荐这种)
4.SDWebImage的实现原理:
首先,SDWebImage用于获取网络图片。所以就需要有URL,没有URL就什么都获取不到。
⑴ SDWebImage并不是直接去请求网络,而是去图片缓存里去看有没有和URL相关的图片,有则直接返回image中,没有就进行下一步。
⑵如果当前图片缓存中没有,SDWebImage依旧不会请求网络,而是检查沙盒中是否存在,如存在则返回到image中,然后在进行第一步的内容。
⑶如果沙盒中也没有的话,则先显示占位图。然后根据图片的URL的下载队列缓存看看是否正在下载,如果下载的话,会等待,避免二次下载。如不存在则创建队列,下载完之后先删除队列然后在把image加入到图片缓存中。
⑷最后刷新UI,将image存入沙盒缓存。
WX20170807-110757.png
5.跳转到指定QQ号
UIWebView *webView = [[UIWebView alloc] initWithFrame:CGRectZero];
NSURL *url = [NSURL URLWithString:@"mqq://im/chat?chat_type=wpa&uin=123456789(QQ号码)&version=1&src_type=web"];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
webView.delegate = self;
[webView loadRequest:request];
[self.view addSubview:webView];