一周随笔--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;   //阴影半径 默认为3


二.第三方库Masonry代码自动布局

1、mas_equalTo是equal to的宏定义,equalTo后面的参数只能是常用数值类型,mas_equalTo后面还可以跟CGsize类型的参数。如下,只能用mas_equalTo

make.size.mas_equalTo(CGSizeMake(img.size.width, img.size.height));

2、下面这句中参数为self.buttonLogin.mas_right,不能写成self.buttonLogin.right

make.right.mas_equalTo(self.buttonLogin.mas_right);

3、

只要添加了这个宏,就不用带mas_前缀 #define MAS_SHORTHAND

只要添加了这个宏,equalTo就等价于mas_equalTo #define MAS_SHORTHAND_GLOBALS

头文件#import "Masonry.h"一定要放在上面两个宏的后面



三.可以获取段落高度的断行模式

只有断行模式为NSLineBreakByWordWrapping和NSLineBreakByCharWrapping的段落才能正常获取到文本高度。

NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc]init];
paragraphStyle.lineSpacing = 2;
paragraphStyle.lineBreakMode = NSLineBreakByCharWrapping;
NSDictionary *dic = @{NSFontAttributeName:[UIFont systemFontOfSize:14.0f],NSParagraphStyleAttributeName:paragraphStyle};
CGFloat hegiht = [string boundingRectWithSize:CGSizeMake(300, MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin attributes:dic context:nil].size.height;


四.extern的使用

extern是变量扩展的关键字,用其声明的变量也称为全局变量,通过它可以跨文件使用同一个变量。使用方法是:

在一个类的.m文件中申明全局变量。例:

NSString *externString = @"haha";

在另一个文件中使用(可以修改):

extern NSString *externString;

注意:假如申明放在一个类的.h文件中,在使用extern NSString *externString;的类中就不能导入申明类的.h头文件,会报duplicate(重复)错误。



五.StoryBoard(故事板)的Segue用法及代码加载

1、storyboard中可以设置点击某个button直接push到下一个视图。如果button所在视图控制器重写了

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender;

通过 segue.destinationViewController 可以获取目标目标视图控制器,这样可以在push前对目标视图控制器相关参数进行设置。也可以将button所在的视图控制器push关联到目标视图控制器,并设置storyboard segue的identifier,通过

[self performSegueWithIdentifier:@"PushToTest" sender:nil];

push到目标视图控制器,sender为需要传递到方法-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender的数据对象。

2、加载故事版(storyboard)中的视图控制器:

UIStoryboard *sb = [UIStoryboard storyboardWithName:@"Test" bundle:nil]; //name不用加.storyboard后缀

UIViewController *viewController = [sb instantiateViewControllerWithIdentifier:@"TestViewController"];

//@“TestViewController”为storyboard的标识符,UIViewController为故事板中视图控制器对应的类

instantiateInitialViewController和instantiateViewControllerWithIdentifier:的区别:

前者得到的是storyBoard中初始化的那个界面(入口界面),后者则根据identifier参数得到整个storyboard中任意的界面(由identifier决定)。



六.automaticallyAdjustsScrollViewInsets

当我们在一个UIViewController中同时创建2个tableView的时候,如果把它们的frame中的Y坐标设置为一样,你可能会发现它们的位置并没有达到你想要的结果.比如第一tableView个frame(0,0,320,568),另一个也frame(0,0,320,568),结果会发现第二个tableView的第一行数据被导航栏遮挡了,以至于我们不得已把第二个frame改成(0,64,320,568-64).因此当我们一个界面有多个tableView之类的,要将视图控制器的automaticallyAdjustsScrollViewInsets设置为NO,完全由自己手动来布局,就不会错乱了。



七.字符串内容替换

NSString *string2 = [string1 stringByReplacingOccurrencesOfString:@"b" withString:@"y"];

用@"y"替换string1中所有的@"b",得到替换后的字符串string2;

NSString *string3 = [string1 stringByReplacingOccurrencesOfString:@"b" withString:@"y" options:NSCaseInsensitiveSearch range:NSMakeRange(0, 4)];

用@"y"替换string1中0·4索引范围内的@"b",比较方式为NSCaseInsensitiveSearch,得到替换后的字符串string3。

关于比较方式枚举:

enum{
    NSCaseInsensitiveSearch = 1,//不区分大小写比较
    NSLiteralSearch = 2,//区分大小写比较
    NSBackwardsSearch = 4,//从字符串末尾开始搜索
    NSAnchoredSearch = 8,//搜索限制范围的字符串
    NSNumbericSearch = 64//按照字符串里的数字为依据,算出顺序。例如 Foo2.txt < Foo7.txt < Foo25.txt
    NSDiacriticInsensitiveSearch = 128,//忽略 "-" 符号的比较
    NSWidthInsensitiveSearch = 256,//忽略字符串的长度,比较出结果
    NSForcedOrderingSearch = 512//忽略不区分大小写比较的选项,并强制返回 NSOrderedAscending 或者NSOrderedDescending
    NSRegularExpressionSearch = 1024//只能应用于 rangeOfString:…, stringByReplacingOccurrencesOfString:...和 replaceOccurrencesOfString:… 方法。使用通用兼容的比较方法,如果设置此项,可以去掉 NSCaseInsensitiveSearch 和 NSAnchoredSearch
}


八.获取当前视图控制器

//获取当前屏幕显示的viewcontroller
- (UIViewController *)getCurrentVC{
    UIViewController *result = nil;
    UIWindow * window = [[UIApplication sharedApplication] keyWindow];
    if (window.windowLevel != UIWindowLevelNormal)
    {
        NSArray *windows = [[UIApplication sharedApplication] windows];
        for(UIWindow * tmpWin in windows)
        {
            if (tmpWin.windowLevel == UIWindowLevelNormal)
            {
                window = tmpWin;
                break;
            }
        }
    }
    UIView *frontView = [[window subviews] objectAtIndex:0];
    id nextResponder = [frontView nextResponder];
    if ([nextResponder isKindOfClass:[UIViewController class]])
        result = nextResponder;
    else
        result = window.rootViewController;
    return result;
}
时间: 2024-07-28 12:49:04

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

一周随笔--15.10.19

一周新知识点记录(15.10.19) 一.ipad——UIPopoverController UIPopoverController继承自NSObject,因此不具备显示能力,它是通过其中的内容控制器显示的内容的.  UIPopoverController使用四部曲: 一.创建UIPopoverController的内容控制器 二.根据内容控制器初始化UIPopoverController对象 三.设置UIPopoverController对象的尺寸 四.显示UIPopoverControlle

一周随笔--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.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方法显示出

x项目第一周随笔

第一周主要做的一个事情就是游戏客户端框架的搭建 目前大家商量的结果就是所有的逻辑都有lua脚本来实现,这样做的主要目的是为了后续更新的方便 因为如果需要重新打包的话,让玩家每次都去下一个很大的包也不太现实. lua的方案,lua调用c++的部分, 用tolua++来导出c++代码的各种数据类型.主要就是写各种pkg文件. 这一部分非常好实现. 比较麻烦的部分是,在lua中绑定一些lua的函数,比如计时器模块,schechlerScriptFun(luafunction, interval) 或者

《软件测试技术》课程第八周随笔

软件测试第八周随笔,本周软件测试的课程已全部结束,随笔重点回顾下因果图.  (一)概念: 因果图法是一种适合于描述对于多种输入条件组合的测试方法,根据输入条件的组合.约束关系和输出条件的因果关系,分析输入条件的各种组合情况,从而设计测试用例的方法,它适合于检查程序输入条件涉及的各种组合情况.因果图法一般和判定表结合使用,通过映射同时发生相互影响的多个输入来确定判定条件.因果图法最终生成的就是判定表,它适合于检查程序输入条件的各种组合情况.采用因果图法能帮助我们按照一定的步骤选择一组高效的测试用例

寒假第六周 2.15 --- 2.21

新的一周^w^ 2.15 hdu Greedy Tino n个w[i],问能否分成相等的两堆,使得每一堆尽量大 不懂,题解说的是双塔dp dp[i][j] 表示前i个搭成两个塔,差值为 j 的,这两个塔的高度的最大和 dp[i+1][j-v] = max(dp[i+1][j-v],dp[i][j]+v) //放在较高的那个塔上 dp[i+1][j+v] = max(dp[i+1][j+v],dp[i][j]+v)//放在较矮的那个塔 dp[i+1][j] = max(dp[i+1][j],dp[

寒假第七周 2.22 --- 2.28

新的一周^w^ 2.22 cf 628d Magic Numbers 自己的状态定义错了 应该是 dp[i][j][0] 前 i 位 有一位是小于的,dp[i][j][1] 前 i 位都是相同的 1 #include<cstdio> 2 #include<cstring> 3 #include<iostream> 4 #include<algorithm> 5 #include<vector> 6 using namespace std; 7 8