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];
上一篇下一篇

猜你喜欢

热点阅读