1、NSInteger打印以及字符串的转换
2、UIScrollView 在iOS7中使用了Autolayout 导致不能滚动
3、APP包瘦身
4、interactivepopgesturerecognizer 使用
5、UICollectionView的数据不够,无法滑动——解决方案
6、workspace — project — targets 讲解
7、绘画虚线, drawRect绘画frame未定的情况
8、APP 启动页不更新
9、判断是否为gif/png图片的正确姿势
具体方法:
1、NSInteger打印以及字符串的转换
NSInteger integer = 1;
NSLog(@"first number: %zd", integer);
NSUInteger uinteger = 1;
NSLog(@"second number: %tu", uinteger);
2、UIScrollView 在iOS7中使用了Autolayout 导致不能滚动
- (void)viewDidLayoutSubviews
{
[_mainScrollView setContentSize:CGSizeMake(SCREEN_WIDTH, SCREEN_HEIGHT + 10)];//增加10个像素让scrollview可上下滑动
}
添加scrollView的content高度.
3、APP包瘦身
1)删除项目中没有使用的图片。
2)删除项目中没有用到的class 和 xib 及storyboard。
安装 fui 工具
sudo gem install fui -n /usr/local/bin
fui usage: https://github.com/dblock/fui
到工程目录下,执行 fui find 命令,可以找出所有的没有用到的class文件。
3)分析ipa包,找出大于500K的文件或内容 使用
find . -type f -size +500000c | xargs ls -lh
4、interactivepopgesturerecognizer 使用
设置left bar button后,会导致右滑返回的效果失效,查看完美的设置方案。
同时为了获取到右滑返回的事件,可以执行
[self.navigationController.interactivePopGestureRecognizer addTarget:self action:@selector(back)];
在ViewController中viewDidAppare中添加,在viewWillDisappear中remove。
5、UICollectionView的数据不够,无法滑动——解决方案
tableView的数据无论多少,它的界面默认都是可以滑动的。
和tableView相比,当collectionView的数据较少不够一个屏幕时,它无法滑动。
解决方案:
_collectionView.alwaysBounceVertical = YES;//设置为总能垂直滑动就OK了。
6、workspace — project — targets 讲解
一个工作空间可以包含多个项目,一个项目可以包含多个目标(生成物)。
一个项目中根据运行的targets不同,可以进行不同的编译设置,project是基础父类,targets是子类,targets的设置会覆盖project的设置。
7、绘画虚线, drawRect绘画frame未定的情况
[yourView.layer setBorderWidth:5.0];
[yourView.layer setBorderColor:
[[UIColor colorWithPatternImage:[UIImage imageNamed:@"DotedImage.png"]] CGColor]];//just add image name and create image with dashed or doted drawing and add here
这里只需要添加QuartzCore/QuartzCore.h框架,像下面一样导入.m文件:
#import <QuartzCore/QuartzCore.h>
注意:
当使用Autolayout后,绘画虚线是根据frame进行的,那么在
- (void)drawRect:(CGRect)rect
{
[self drawBorderLayer];
}
drawRect方法中,进行绘画。
8、APP 启动页不更新
修改了LaunchScreen.xib 后,模拟器上显示正常,但是真机上没有更新。
原因: 应用缓存
解决:真机上删除APP,重启手机,重新安装APP。
9、判断是否为gif/png图片的正确姿势
//通过图片Data数据第一个字节 来获取图片扩展名
- (NSString *)contentTypeForImageData:(NSData *)data
{
uint8_t c;
[data getBytes:&c length:1];
switch (c)
{
case 0xFF:
return @"jpeg";
case 0x89:
return @"png";
case 0x47:
return @"gif";
case 0x49:
case 0x4D:
return @"tiff";
case 0x52:
if ([data length] < 12) {
return nil;
}
NSString *testString = [[NSString alloc] initWithData:[data subdataWithRange:NSMakeRange(0, 12)] encoding:NSASCIIStringEncoding];
if ([testString hasPrefix:@"RIFF"]
&& [testString hasSuffix:@"WEBP"])
{
return @"webp";
}
return nil;
}
return nil;
}
其实图片数据的第一个字节是固定的,一种类型的图片第一个字节就是它的标识, 我们来调用一下这个方法:
//假设这是一个网络获取的URL
NSString *path = @"http://pic.rpgsky.net/images/2016/07/26/3508cde5f0d29243c7d2ecbd6b9a30f1.png";
NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:path]];
//调用获取图片扩展名
NSString *string = [self contentTypeForImageData:data];
//输出结果为 png
NSLog(@"%@",string);