一周随笔--15.10.19

一周新知识点记录(15.10.19)

一.ipad——UIPopoverController

UIPopoverController继承自NSObject,因此不具备显示能力,它是通过其中的内容控制器显示的内容的。

 UIPopoverController使用四部曲:

一、创建UIPopoverController的内容控制器

二、根据内容控制器初始化UIPopoverController对象

三、设置UIPopoverController对象的尺寸

四、显示UIPopoverController对象

显示UIPopoverController对象有两种方法:

方法一:通过点击UIBarButtonItem按钮显示

- (void)presentPopoverFromBarButtonItem:(UIBarButtonItem *)item permittedArrowDirections:(UIPopoverArrowDirection)arrowDirections animated:(BOOL)animated;

参数说明:

item:触发显示的UIBarButtonItem对象

arrowDirections:显示的箭头方向

animated:是否展示过渡动画

方法二:对特定区域显示

- (void)presentPopoverFromRect:(CGRect)rect inView:(UIView *)view permittedArrowDirections:(UIPopoverArrowDirection)arrowDirections animated:(BOOL)animated;

参数说明:

rect:箭头指向的区域

view:rect对应的视图

arrowDirections:显示箭头的方向

animated:是否展示过渡动画

注意:

1、UIPopoverController对象的尺寸不建议写死,应当根据内容控制器的需要来。ios7以前对内容控制器(UIViewController)的contentSizeForViewInPopover设值,ios7以后对内容控制器的preferredContentSize设值。

2、UIPopoverController对象显示出来的时候,默认任何其他控件都是不能交互的,点击UIPopoverController对象区域意外的部分,对象dismiss。若想UIPopoverController对象显示的时候能和某个控件交互,可以通过设置passthroughViews属性实现。它是一个数组对象,将需要交互的控件打包成数组复制给它即可。


二.二维码生成

ios7以后系统提供了CoreImage框架中生成二维码的滤镜方法。由C语言支持的第三方库libqrencode也是不错的选择。见Demo


三.显示模态窗口时的显示方式及过渡方式

//显示方式
vc.modalPresentationStyle = UIModalPresentationFullScreen;

//过渡方式
vc.modalTransitionStyle = UIModalTransitionStylePartialCurl;

对于iphone而言,只考虑过渡方式。

对于ipad而言,两者都可考虑,显示方式比较常用的是UIModalPresentationFormSheet(占据中间一小块)


四.storyboard中巧用UITableView

可以直接在storyboard中设置tableView的头视图和尾视图,拖出tableView到IB后,然后拖出视图控件到tableView作为子视图(tableView在IB中只允许有两个子视图,头视图和尾视图,两个视图是连着的,头在上尾在下)。只适用与storyboard,xib不适用,习惯用storyboard的话能够大大提升开发效率。

另外可以直接在IB中对tableView设置代理和数据源。


五.高度自适应options参数怎么设置

NSStringDrawingTruncatesLastVisibleLine:

如果文本内容超出指定的矩形限制,文本将被截去并在最后一个字符后加上省略号。如果没有指定NSStringDrawingUsesLineFragmentOrigin选项,则该选项被忽略。

NSStringDrawingUsesLineFragmentOrigin:

绘制文本时使用 line fragement origin 而不是 baseline origin。

NSStringDrawingUsesFontLeading:

计算行高时使用行距。(译者注:字体大小+行间距=行距)

NSStringDrawingUsesDeviceMetrics:

计算布局时使用图元字形(而不是印刷字体)。

测试发现:

只使用NSStringDrawingUsesLineFragmentOrigin时,以宽度约束为依赖,即使计算出的高度超过设定的约束高度,最终还是返回计算出的高度,也就是忽略高度的约束。

使用NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingTruncatesLastVisibleLine时,如果计算的高度超过约束的高度,最终返回的高度是可容纳最大行数的文本对应高度,比如约束的高度容纳得下2行,容不下3行,则返回的Size高度是2行对应的高度。

总结用法:

计算时options参数使用

NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingTruncatesLastVisibleLine|NSStringDrawingUsesFontLeading

另外计算单行文本也可以直接使用sizeWithAttributes


六.导航控制器的topViewController & visibleViewController

topViewController代表当前navigation栈中最上层的VC,而visibleViewController代表当前可见的VC,它可能是topViewController,也可能是当前topViewController present出来的VC。因此UINavigationController的这两个属性通常情况下是一样,但也有可能不同。


七.自定义日历的实现

日历主界面通过collectionView搭建,难点在于获取指定月的日历结构,包括这个月开头有几天是上个月的,末尾有几天是下个月的,将这些信息通过不同的字符标识保存到数组中,例如*表示上个月的date、#表示下个月的date,中间本月用1~天数标识,就能得到指定月的日历结构。

获取到这个存有指定月日历结构的数组是关键,有了它界面的搭建就有依据了。具体见Demo

值得一提的是,每个星期的第一天是星期日。因此如果日历7天为一行的话,默认最左边是星期日。如果想改为从左到右是星期一~星期日的结构,只要设置日历对象calendar的FirstWeekday属性值为2即可,(默认为1,从星期日开始)。


八.关于字符串的高度

一字符串,字体大小15,计算好了size,显示成两行,行间距设置成3,打印计算出的高度为38.79。

打印字体大小15的font对象的各个属性以及查看

leading*2 = 35.790000

lineHeight*2 = 35.790000

capHeight*2 = 21.420000

xHeight*2 = 15.510000

ascender*2 = 28.560000

descender*2 = -7.230000

lineSpacing = 3.000000(事先设置) 

从数据可以看出:

(1)计算出的高度是以两行行高(lineHeight)和一行行间距(lineSpacing)组成的。

(2)ascender是文本基线到文本顶部的距离,descender是文本底部到基线的距离(是负的),行高(lineHeight = ascender - descender)

(3)xHeight和capHeight不重要,具体可以查网上的那张字形度量图,但是那张图个人认为有问题,与实际测试打印的数据不符。leading就是lineHeight。

另外经测试发现,对于设置了行间距了文本

一行文本计算高度结果 = 文本高度+行间距

两行文本计算高度结果 = 文本高度*2+行间距

三行文本计算高度结果 = 文本高度*3+行间距*2

四行....

如果未设置行间距的文本(文本默认行间距就是0),文本高度就是行高*行数

时间: 2024-10-14 00:47:16

一周随笔--15.10.19的相关文章

一周随笔--15.10.27

一周新知识点记录(15.10.27) 一.不规则按钮OBShapedButton 常规按钮都是一个矩形区域,即使设置了按钮layer的cornerRadious,能响应点击事件的依旧是整个矩形区域. OBShapedButton是开源的第三方库,直接继承自UIButton,直接使用即可.它的响应区域只限定在button的图片或者背景图片区域,周围空出的区域无法响应. 二.sendActionsForControlEvents UIButton的实例方法,通过代码手动发送按钮的点击事件触发按钮的响

一周随笔--15.10.06

一周新知识点记录(15.10.06) 一.UIWindow的windowLevel (优先级) 我们在程序中获取通过[UIApplication sharedApplication].keyWindow获取到应用程序的主屏幕,其实并不一定是AppDelegate类中定义的那个window.首先了解UIWindow的一些概念: UIWindow是一种特殊的UIView,它也可以自定义,在程序中可以同时显示多个UIWindow对象(UIWindow对象通过makeKeyAndVisible方法显示出

一周随笔--15.11.02

一周新知识点记录(15.11.02) 一.storyboard中搭建tableViewCell 在storyboard中搭建tableView,一种是以UITableViewController为容器,另一种则是以UIViewController为容器,拖出一个tableView来. 当以UITableViewController为容器时,UITableViewCell可以是动态也可以是静态的,若是静态的则控制器可以不关联文件.(具体待验证)http://m.blog.csdn.net/blog

一周随笔--15.9.21

一周新知识点记录(15.9.21) 一. writeToFile:atomically: - (BOOL)writeToFile:(NSString *)path atomically:(BOOL)useAuxiliaryFile; 第二个参数的意思是: 如果为YES则保证文件的写入原子性,就是说会先创建一个临时文件,直到文件内容写入成功再导入到目标文件里. 如果为NO,则直接写入目标文件里. 二.  NSerror 参数依次为: 1.错误域(NSString) 2.错误标识 (NSIntege

一周随笔--15.9.28

一.阴影(NSShadow)参考 self.view.layer.shadowColor = [UIColor blackColor].CGColor; //阴影颜色 self.view.layer.shadowOffset = CGSizeMake(10, 10); //阴影偏移 四周阴影则设置为CGSizeZero self.view.layer.shadowOpacity = 1; //阴影透明度,默认为0,不显示 self.view.layer.shadowRadius = 10; //

Alpha周(2017年10月19)贡献分配规则和分配结果

.从alpha周(2017年10月19日开始的2周)开始,提高贡献分比重. 贡献分 : 团队分 = 1 : 5 教师会在核算每位同学总分时按比例乘以系数. 每位同学带入团队贡献分10分,如果团队一共7位同学,则共有贡献分10*7=70分用于分配. 对贡献分评定的规定要求,每两位同学贡献分不得相同,并且贡献分精确到整数,不得包括小数. 1 基础分:每人4分       2 个人贡献分:按照leangoo里面的卡片数进行百分比给分(个人卡片数/总卡片数) 冉华 9 田继平 6 王伟东 8 李园园 7

魏韦新:原油跌宕起伏,EIA登陆,10.19原油沥青操作建议

魏韦新:原油跌宕起伏,EIA登陆,10.19原油沥青操作建议 很多朋友是套完空单又套多单,为什么别人做原油,你也做,但别人赚钱了,而你还在为解套还烦着.每天看新闻说谁谁炒银原油赚钱买房买车了,你羡慕吗?不要跟我说不,你有!但你在羡慕别人的同时你有想过这是为什么吗?难道是你技术比别人差?还是说你比别人笨?不是!都不是!别人赚到钱而你亏钱的原因只有一个,那就是人家有一个好的指导老师,一个好的理财团队为他服务而你没有,仅此而已! 魏韦新--昨日做单回顾 昨天魏韦新一直在等待做空的机会,亚欧两盘行情清淡

Scrum会议10.19

Scrum会议 组名称:好好学习 项目名称:记账本 参会成员:林莉(Master)胡丽娜 宫丽君 汪东涵 时间:2016.10.19 已完成内容: 1.完成新项目的查找,查找学姐的代码和项目. 2.理解学习代码和项目. 计划完成: 1.胡丽娜:记录会议内容,写随笔更新博客. 2.林莉:新项目的查找. 3.汪东涵:项目代码和功能的理解. 4.张金生:学习功能. 燃尽图:

安装Ubuntu 15.10后要做的事

Ubuntu 15.10发布了,带来了很多新特性,同样也依然带着很多不习惯的东西,所以装完系统后还要进行一系列的优化. 1.删除libreoffice libreoffice虽然是开源的,但是Java写出来的office执行效率实在不敢恭维,装完系统后果断删掉 [html] view plain copy sudo apt-get remove libreoffice-common 2.删除Amazon的链接 [html] view plain copy sudo apt-get remove