纯代码sizeclass使用
2015-07-21 17:40
375 查看
王叫兽又回来了,上一集我们讲到了sizeclass在storeboard和xib中的使用,现在大家应该也都会用了。有的人问了sizeclass只能与Interface Builder一起使用吗?
答案当然是不是喽。
Apple公司在iOS8引入新的类专门用于纯代码使用sizeclass而准备的,这个类叫"UITraitCollection",可以使用一下几个方法进行初始化:
1)+ (UITraitCollection *)traitCollectionWithHorizontalSizeClass:(UIUserInterfaceSizeClass)horizontalSizeClass;
2)+ (UITraitCollection *)traitCollectionWithVerticalSizeClass:(UIUserInterfaceSizeClass)verticalSizeClass;
3)+ (UITraitCollection *)traitCollectionWithUserInterfaceIdiom:(UIUserInterfaceIdiom)idiom;
4)+ (UITraitCollection *)traitCollectionWithDisplayScale:(CGFloat)scale;
5)+ (UITraitCollection *)traitCollectionWithTraitsFromCollections:(NSArray *)traitCollections;
可以先使用前四个方法生成几个你预想设置的sizeclass的特性对象,最终通过方法5初始化sizeclass特性集合。
eg:
同时还可以在最终初始化sizeclass特性集合之前进行scale的设置,这可是个很牛(yin)叉(dang)的技能:
其中scale = 1.0为普通屏幕,scale = 2.0为Retina屏幕,scale > 2.0为更高的显示比例(dpi大于Retina屏幕的)屏幕。
在开始sizeclass布局界面之前还不得不介绍一下UITraitEnvironment这个协议,iOS8后UIScreen、UIWindow、UIViewController、UIView以及iOS8新出的UIPresentationController都遵守这个协议,使得这些类以及他们的子类都有traitCollection这个只读属性,让我们可以通过这个属性布局不同的sizeclass场景。
eg:
注:traitCollection使用起来很猥琐,请花点时间把这点儿看完思密达,注意containsTraitsInCollection:这个是否包含特征集合的方法,
特征集合是否包含另一个特征集合,是一个子集判断,而不是Interface Builder里sizeclass的any包含compact和regular,请不要将
两者混为一谈。
同时候还可以在UIScreen、UIWindow、UIViewController、UIView、UIPresentationController里面实现UITraitEnvironment
协议的traitCollectionDidChange:代理方法去监控sizeclass特性的转变。
demo今晚下班做一下会更新地址,敬请期待思密达。
答案当然是不是喽。
Apple公司在iOS8引入新的类专门用于纯代码使用sizeclass而准备的,这个类叫"UITraitCollection",可以使用一下几个方法进行初始化:
1)+ (UITraitCollection *)traitCollectionWithHorizontalSizeClass:(UIUserInterfaceSizeClass)horizontalSizeClass;
2)+ (UITraitCollection *)traitCollectionWithVerticalSizeClass:(UIUserInterfaceSizeClass)verticalSizeClass;
3)+ (UITraitCollection *)traitCollectionWithUserInterfaceIdiom:(UIUserInterfaceIdiom)idiom;
4)+ (UITraitCollection *)traitCollectionWithDisplayScale:(CGFloat)scale;
5)+ (UITraitCollection *)traitCollectionWithTraitsFromCollections:(NSArray *)traitCollections;
可以先使用前四个方法生成几个你预想设置的sizeclass的特性对象,最终通过方法5初始化sizeclass特性集合。
eg:
// 垂直方向特征 UITraitCollection *verticaTrait = [UITraitCollection traitCollectionWithVerticalSizeClass: UIUserInterfaceSizeClassUnspecified]; // 水平方向特征 UITraitCollection *horizontalTrait = [UITraitCollection traitCollectionWithHorizontalSizeClass: UIUserInterfaceSizeClassCompact]; // Device特征设置为iphone UITraitCollection *iphoneIdiomTrait = [UITraitCollection traitCollectionWithUserInterfaceIdiom: UIUserInterfaceIdiomPhone]; // iphone 竖屏sizeclass情况 UITraitCollection *sizeclassTraitCollection = [UITraitCollection traitCollectionWithTraitsFromCollections: @[iphoneIdiomTarit, horizontalTarit]];
同时还可以在最终初始化sizeclass特性集合之前进行scale的设置,这可是个很牛(yin)叉(dang)的技能:
// Retina屏幕 UITraitCollection *scaleTraitCollection = [UITraitCollection traitCollectionWithDisplayScale:2.0];
其中scale = 1.0为普通屏幕,scale = 2.0为Retina屏幕,scale > 2.0为更高的显示比例(dpi大于Retina屏幕的)屏幕。
在开始sizeclass布局界面之前还不得不介绍一下UITraitEnvironment这个协议,iOS8后UIScreen、UIWindow、UIViewController、UIView以及iOS8新出的UIPresentationController都遵守这个协议,使得这些类以及他们的子类都有traitCollection这个只读属性,让我们可以通过这个属性布局不同的sizeclass场景。
eg:
if ([self.traitCollection containsTraitsInCollection:sizeclassTaritCollection]) { UIView *viewTemp = [[UIView alloc] initWithFrame:CGRectMake(100, 100, 100, 100)]; viewTemp.backgroundColor = [UIColor cyanColor]; [self.view addSubview:viewTemp]; }// 只能在Retina屏幕(326dpi)的iPhone上显示
注:traitCollection使用起来很猥琐,请花点时间把这点儿看完思密达,注意containsTraitsInCollection:这个是否包含特征集合的方法,
特征集合是否包含另一个特征集合,是一个子集判断,而不是Interface Builder里sizeclass的any包含compact和regular,请不要将
两者混为一谈。
同时候还可以在UIScreen、UIWindow、UIViewController、UIView、UIPresentationController里面实现UITraitEnvironment
协议的traitCollectionDidChange:代理方法去监控sizeclass特性的转变。
demo今晚下班做一下会更新地址,敬请期待思密达。
相关文章推荐
- thinkphp自动映射分析
- Java定时器,定时处理相关程序
- Java中类名与文件名的关系
- Java列出2到100之间所有素数的方法
- JAVA中int、String的类型转换
- C#学习笔记(十四):GC机制和弱引用
- c++书籍
- struts2文件上传
- Hibernate&&Spring中的缩写英文术语
- Delphi System.Sqr、System.Sqrt - 求一个数的平方与平方根
- 12天学好C语言——记录我的C语言学习之路(Day 9)
- 12天学好C语言——记录我的C语言学习之路(Day 9)
- Java泛型--转载
- C++之普通成员函数、虚函数以及纯虚函数的区别与用法要点
- python API开发
- delphi如何将real类型转为pchar
- java中对get和set方法的理解
- c++ 计蒜客第13题整数转换为罗马数字
- Eclipse 无法编译 或 提示“错误: 找不到或无法加载主类”
- wxpython