三十八:各个版本IPHONE分辨率及图片的实现原理
desert@2x : iPhone 4s ( x )
desert-568h@2x : iPhones , 5C and 5S ( x )
desert-667h@2x : iPhone ( x )
desert-736h@3x : iPhone + ( x )
desert@2x~ipad : iPad ( x )
iPhone 4S Screen Size: 3.5 Inches Resolution: 640 x 960 (Half: 320 x 480)
iPhone 5 Screen Size: 4.0 Inches Resolution: 640 × 1136 (Half: 320 x 568)
iPhone 5S/5C Screen Size: 4.0 Inches Resolution: 640 x 1136 (Half: 320 x 568)
iPhone 6 Screen Size: 4.7 Inches Resolution: 750 x 1334 (Half: 375 x 667)
iPhone 6 Plus Screen Size: 5.5 Inches Resolution: 1242 x 2208 (1/3: 414 x 736) The size of iPhone 6 Plus is @3x scaling. So, it is divided by 3.
界面大小比例:
图片大小实现的原理:
#import <UIKit/UIKit.h> typedef NS_ENUM(NSInteger, thisDeviceClass) { thisDeviceClass_iPhone,
thisDeviceClass_iPhoneRetina,
thisDeviceClass_iPhone5,
thisDeviceClass_iPhone6,
thisDeviceClass_iPhone6plus, // we can add new devices when we become aware of them thisDeviceClass_iPad,
thisDeviceClass_iPadRetina, thisDeviceClass_unknown
}; thisDeviceClass currentDeviceClass(); @interface UIImage (DeviceSpecificMedia) + (instancetype )imageForDeviceWithName:(NSString *)fileName; @end
#import "UIImage+DeviceSpecificMedia.h" thisDeviceClass currentDeviceClass() { CGFloat greaterPixelDimension = (CGFloat) fmaxf(((float)[[UIScreen mainScreen]bounds].size.height),
((float)[[UIScreen mainScreen]bounds].size.width)); switch ((NSInteger)greaterPixelDimension) {
case :
return (( [[UIScreen mainScreen]scale] > 1.0) ? thisDeviceClass_iPhoneRetina : thisDeviceClass_iPhone );
break;
case :
return thisDeviceClass_iPhone5;
break;
case :
return thisDeviceClass_iPhone6;
break;
case :
return thisDeviceClass_iPhone6plus;
break;
case :
return (( [[UIScreen mainScreen]scale] > 1.0) ? thisDeviceClass_iPadRetina : thisDeviceClass_iPad );
break;
default:
return thisDeviceClass_unknown;
break;
}
} @implementation UIImage (deviceSpecificMedia) + (NSString *)magicSuffixForDevice
{
switch (currentDeviceClass()) {
case thisDeviceClass_iPhone:
return @"";
break;
case thisDeviceClass_iPhoneRetina:
return @"@2x";
break;
case thisDeviceClass_iPhone5:
return @"-568h@2x";
break;
case thisDeviceClass_iPhone6:
return @"-667h@2x"; //or some other arbitrary string..
break;
case thisDeviceClass_iPhone6plus:
return @"-736h@3x";
break; case thisDeviceClass_iPad:
return @"~ipad";
break;
case thisDeviceClass_iPadRetina:
return @"~ipad@2x";
break; case thisDeviceClass_unknown:
default:
return @"";
break;
}
} + (instancetype )imageForDeviceWithName:(NSString *)fileName
{
UIImage *result = nil;
NSString *nameWithSuffix = [fileName stringByAppendingString:[UIImage magicSuffixForDevice]]; result = [UIImage imageNamed:nameWithSuffix];
if (!result) {
result = [UIImage imageNamed:fileName];
}
return result;
} @end
三十九:其它几张知识图片
1:NSObject继承类图
2:sqlite3返回含义
3:视图坐标说明
4:生命周期图
5:UI继承图
6:Segue列表跳转,关于selection跟Accessory的区别
7:IOS6与IOS7界页的差别
四十:为什么XCode项目中会有A M这种标识
如果没装过svn,默认是本机 git管理。 M是表示改文件有改动,A是新增加的文件。目前是都没有提交到服务器状态,到source control 里点选commit 提交后就没这些了,下次再有改动或新增,还会出现该标记。
四十一:MAC 本地进行IP映射域名的操作
1.打开finder, 快捷键:shift+command+g 前往文件夹 “/etc”
2.找到hosts文件托到桌面修改,再把/etc下源文件删除,把桌面修改好的拖进/etc。
最后在终端:ping svnserver ,如果能ping通到192.168.1.51,说明映射成功
四十二:arm64 armv7 armv7s arm6
目前ios的指令集有以下几种:
• armv6 ◦
iPhone
◦ iPhone2
◦ iPhone3G
◦ 第一代和第二代iPod Touch • armv7
◦ iPhone4
◦ iPhone4S • armv7s
◦ iPhone5
◦ iPhone5C • arm64
◦ iPhone5S 机器对指令集的支持是向下兼容的,因此armv7的指令集是可以运行在iphone5S的,只是效率没那么高而已~ ================================================ Architecture : 指你想支持的指令集。 Valid architectures : 指即将编译的指令集。 Build Active Architecture Only : 只是否只编译当前适用的指令集。 ================================================ 现在是2014年初,其实4和4S的用户还是蛮多的,而iphone3之类的机器几乎没有了,所以我们的指令集最低必须基于armv7. 因此,Architecture的值选择:armv7 armv7s arm64 PS:选arm64时需要最低支持5.1.1:
四十三:真机测试报 TCWeiboSDK 93 duplicate symbols for architecture armv7
这是因为在项目中引用的两个相同的类库引起了,在我的项目中是因为引入的两个不同指令集引起的;
四十四:UINavigationBar的一些属性的行为发生了变化
self.navigationController.navigationBar.barTintColor = [UIColor blackColor];
self.navigationController.navigationBar.tintColor = [UIColor whiteColor];
[self.navigationController.navigationBar setTitleTextAttributes:@{NSForegroundColorAttributeName : [UIColor whiteColor]}];
self.navigationController.navigationBar.translucent = NO;
IOS开发基础知识--碎片7的更多相关文章
-
IOS开发基础知识碎片-导航
1:IOS开发基础知识--碎片1 a:NSString与NSInteger的互换 b:Objective-c中集合里面不能存放基础类型,比如int string float等,只能把它们转化成对象才可 ...
-
IOS开发基础知识--碎片33
1:AFNetworking状态栏网络请求效果 直接在AppDelegate里面didFinishLaunchingWithOptions进行设置 [[AFNetworkActivityIndicat ...
-
IOS开发基础知识--碎片42
1:报thread 1:exc_bad_access(code=1,address=0x70********) 闪退 这种错误通常是内存管理的问题,一般是访问了已经释放的对象导致的,可以开启僵尸对象( ...
-
IOS开发基础知识--碎片50
1:Masonry 2个或2个以上的控件等间隔排序 /** * 多个控件固定间隔的等间隔排列,变化的是控件的长度或者宽度值 * * @param axisType 轴线方向 * @param fi ...
-
IOS开发基础知识--碎片3
十二:判断设备 //设备名称 return [UIDevice currentDevice].name; //设备型号,只可得到是何设备,无法得到是第几代设备 return [UIDevice cur ...
-
IOS开发基础知识--碎片11
1:AFNetwork判断网络状态 #import “AFNetworkActivityIndicatorManager.h" - (BOOL)application:(UIApplicat ...
-
IOS开发基础知识--碎片14
1:ZIP文件压缩跟解压,使用ZipArchive 创建/添加一个zip包 ZipArchive* zipFile = [[ZipArchive alloc] init]; //次数得zipfilen ...
-
IOS开发基础知识--碎片16
1:Objective-C语法之动态类型(isKindOfClass, isMemberOfClass,id) 对象在运行时获取其类型的能力称为内省.内省可以有多种方法实现. 判断对象类型 -(BOO ...
-
IOS开发基础知识--碎片19
1:键盘事件顺序 UIKeyboardWillShowNotification // 键盘显示之前 UIKeyboardDidShowNotification // 键盘显示完成后 UIKeyboar ...
-
IOS开发基础知识--碎片40
1:Masonry快速查看报错小技巧 self.statusLabel = [UILabel new]; [self.contentView addSubview:self.statusLabel]; ...
随机推荐
-
MATLAB与C/C++混合编程的一些总结
[转载请注明出处]http://www.cnblogs.com/mashiqi 先上总结: 由于C/C++语言的函数输入输出参数的特点,可以将多个参数方便地传入一个函数中,但却不能方便地返回多个参数. ...
-
sell-- wordPOI
1. http://poi.apache.org/ 2.创建项目,结构如下 三: 查看效果 打开: 测试源码: /* ========================================= ...
-
Oracle中的for语句
for语句是一个可预置循环次数的循环控制语句,他是一个循环计数器,通常是一个整形变量,通过这个循环计数器来控制循环执行的次数 语法如下: for variable_counter_name in [e ...
-
POJ2115 C Looooops 模线性方程(扩展欧几里得)
题意:很明显,我就不说了 分析:令n=2^k,因为A,B,C<n,所以取模以后不会变化,所以就是求(A+x*C)%n=B 转化一下就是求 C*x=B-A(%n),最小的x 令a=C,b=B-A ...
-
bzoj1670
第一道凸包 采用Andrew算法,不论实现还是理解都非常简单 ..] of longint; i,j,k,m,n:longint; ans:double; procedure swap ...
-
JavaScript学习心得(六)
函数 对函数参数没有任何类型检查(弱类型),在必要时在函数内加上类型检查(typeof): JavaScript的函数参数无法设置默认值(可以通过检查参数,当为undefined时设置一个值 func ...
-
C++ - Operator Precedence
The following table lists the precedence and associativity of C++ operators. Operators are listed to ...
-
knob.js进度插件
关于knob.js进度插件的使用 关于这个插件,妹的,第一次使用坑死爹了,各种不会,幸亏我有持之以恒的精神,最终还是让其臣服于我的胯下.... 1. 引入 head 部分添加knob.js,同时引 ...
-
C语言第二周作业
一.PTA实验作业 题目一:7-1 计算分段函数 1.实验代码 double x,y; scanf("%lf", &x); if(x >= 0){ y=pow(x,0 ...
-
Python 地点转化为经纬度
1.geopy包下载地点https://pypi.python.org/pypi/geopy 2.安装步骤 运行cmd,切换到D:/python/geopy-1.11.0/目录下 ...