iOS开发基础知识--碎片26

摘要:
在项目的BuildSettings中,修改其信息。plistFile选项是B-info.plist
 
iOS开发基础知识--碎片26 

1:UICollectionView如果在数据不够一屏时上下滚动

当数据不多,collectionView.contentSize小于collectionView.frame.size的时候,UICollectionView是不会滚动的,可以增加下面代码就可以:

self.myCollectionView.alwaysBounceVertical = YES;

2:画虚线CGContextSetLineDash(竖向跟横向)

复制代码
竖向:
   
    UIImageView *imageView1 = [[UIImageView alloc]initWithFrame:CGRectMake(10, 100, 10, 100)];
    [self.view addSubview:imageView1];
    
    UIGraphicsBeginImageContext(imageView1.frame.size);   //开始画线
    [imageView1.image drawInRect:CGRectMake(0, 0, imageView1.frame.size.width, imageView1.frame.size.height)];
    CGContextSetLineCap(UIGraphicsGetCurrentContext(), kCGLineCapRound);  //设置线条终点形状
    
    float lengths[] = {2,2};
    CGContextRef line = UIGraphicsGetCurrentContext();
    CGContextSetStrokeColorWithColor(line, [UIColor blackColor].CGColor);
    
    CGContextSetLineDash(line, 0, lengths, 2);  //画虚线
    CGContextMoveToPoint(line, 10.0, 10.0);    //开始画线(10是指从imageView1y轴起点后的10-50 高共40)
    CGContextAddLineToPoint(line, 10.0, 50.0);
    CGContextStrokePath(line);
    
    imageView1.image = UIGraphicsGetImageFromCurrentImageContext();
复制代码
复制代码
横向:

    UIImageView *imageView1 = [[UIImageView alloc]initWithFrame:CGRectMake(0, 100, 320, 20)];
    [self.view addSubview:imageView1];
    
    UIGraphicsBeginImageContext(imageView1.frame.size);   //开始画线
    [imageView1.image drawInRect:CGRectMake(0, 0, imageView1.frame.size.width, imageView1.frame.size.height)];
    CGContextSetLineCap(UIGraphicsGetCurrentContext(), kCGLineCapRound);  //设置线条终点形状
    
    float lengths[] = {10,5};
    CGContextRef line = UIGraphicsGetCurrentContext();
    CGContextSetStrokeColorWithColor(line, [UIColor redColor].CGColor);
   
    CGContextSetLineDash(line, 0, lengths, 2);  //画虚线
    CGContextMoveToPoint(line, 0.0, 20.0);    //开始画线(从X轴从0到310)
    CGContextAddLineToPoint(line, 310.0, 20.0);
    CGContextStrokePath(line);
    
    imageView1.image = UIGraphicsGetImageFromCurrentImageContext();
复制代码

注意:lengths的值{10,10}表示先绘制10个点,再跳过10个点,如此反复

        如果把lengths值改为{10, 20, 10},则表示先绘制10个点,跳过20个点,绘制10个点,跳过10个点,再绘制20个点,如此反复

3:去掉系统navigationBar自带底下黑边(在viewDidLoad里面实现)

复制代码
- (void)viewDidLoad {
    [super viewDidLoad];
    
    [[UINavigationBar appearance] setBackgroundImage:[[UIImage alloc] init] forBarMetrics:UIBarMetricsDefault];
    [[UINavigationBar appearance] setShadowImage:[[UIImage alloc] init]];
}
复制代码

 另外一种是隐藏,因为有时还可以设计显示:

复制代码
-(void)useMethodToFindBlackLineAndHind  
{  
    UIImageView* blackLineImageView = [self findHairlineImageViewUnder:self.navigationController.navigationBar];  
    //隐藏黑线(在viewWillAppear时隐藏,在viewWillDisappear时显示)  
    blackLineImageView.hidden = YES;  
}  
- (UIImageView *)findHairlineImageViewUnder:(UIView *)view  
{  
    if ([view isKindOfClass:UIImageView.class] && view.bounds.size.height <= 1.0)  
    {  
        return (UIImageView *)view;  
    }  
    for (UIView *subview in view.subviews) {  
        UIImageView *imageView = [self findHairlineImageViewUnder:subview];  
        if (imageView) {  
            return imageView;  
        }  
    }  
    return nil;  
}  
复制代码

4: XCode 同一Project创建多个target

复制代码
假设原来的target名字为A,我们需要新建一个target B

1. 在原来的target上右键,选择duplicate,Xcode会复制一个名为A copy的target对象,同时生成一个A copy-info.plist和A copy的scheme
2. 改名
a)对A copy target改名,可以直接单击target来修改,改成B
b)A copy-info.plist,默认生成在程序环境根目录,也就是A.xcodeproj的同级目录中,如果想放到里层(比如与A-info.plist放在同级目录),可以先在Xcode删除A copy-info.plist索引,然后拷贝文件到制定目录中,然后更名为B-info.plist,在add到project中。在Project的Build Settings中,修改Info.plist File选项为B-info.plist的目录(相对路径),这样就可以看到Info页了(就是B-info.plist),接着修改ProductName和Bundle identifier,使之成为另一个app。Prefix Header的路径,视具体需求而定是否要修改,如果两个target可以公用同一个Prefix Header,那么就不需要修改这里的路径
c)修改scheme,在调试的Stop按钮边上,我们可以选择本工程中所有的target来做编译,如果不修改,在这里选择出来的名字就是A copy,为了与新建的target统一起来,同样也要修改这里的名字。点击scheme选择区,然后选Manager Scheme,找到A copy,然后改成你需要的名字,比如B

用duplicate的好处是,如果两个target的相同点很多,用duplicate,就可以把相关的设置全部拷贝过来,而不需要做过多的修改

生成一个新的target,一定会与原target有区别,这里可以定义预编译宏,来区分两个版本的不同代码,预编译宏可以在Build Settings中Preprocessor Macros定义,比如在我们新建的target B中定义预编译宏MACRO,然后在代码中通过
#if defined (MACRO)
//target  B需要执行的代码
#else
//target A需要执行的代码
#endif
来区分

其他:Build Phases(各target编译所包含的内容,需要注意的是,如果创建了target B后,再往A里面添加资源或文件,target B中不会自动增加这些资源,需要手动添加)
1.Compile Sources
需要编译的代码文件
2.Link Binary With Libraries
编译所依赖的库
3.Copy Bundle Resources
编译需要的资源
每个target可以根据具体需要增减里面的内容
复制代码

iOS开发基础知识--碎片26第11张

还有另外一种类似,只是修改配置,地址:http://www.jianshu.com/p/0f1e8dc0812a

5:Xcode7打开旧项目FrameWork文件夹下的.dylib库缺失,添加方法

项目Target中Link Binary With Libraries  点击下方 “+”添加,  显示搜索页面,在此搜.dylib搜不出来(只能搜到同名的.tbd), 需点击 Add Other,出现文件目录页面 (正常情况通过Finder同样找不到.dylib文件,因该文件是隐藏文件。需按快捷键 CMD+Shift+G,输入/usr/lib后进入隐藏界面,然后添加需要的.dylib即可。

 
 

免责声明:文章转载自《iOS开发基础知识--碎片26》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇pycharm的使用Linux中VMware虚拟机硬盘空间扩大方法下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

iOS开发时间戳与时间,时区的转换,汉字与UTF8,16进制的转换

原文:http://blog.sina.com.cn/s/blog_68661bd80101njdo.html //获取当前系统的时间戳+(long)getTimeSp{    long time;    NSDate *fromdate=[NSDate date];    time=(long)[fromdate timeIntervalSince197...

iptables规则的查看、添加、删除和修改

  http://ns.35.com/?p=211 1、查看iptables -nvL –line-number -L 查看当前表的所有规则,默认查看的是filter表,如果要查看NAT表,可以加上-t NAT参数 -n 不对ip地址进行反查,加上这个参数显示速度会快很多 -v 输出详细信息,包含通过该规则的数据包数量,总字节数及相应的网络接口 –line...

buildroot使用介绍【转】

转自:https://www.cnblogs.com/arnoldlu/p/9553995.html buildroot是Linux平台上一个构建嵌入式Linux系统的框架。整个Buildroot是由Makefile脚本和Kconfig配置文件构成的。你可以和编译Linux内核一样,通过buildroot配置,menuconfig修改,编译出一个完整的可...

iOS开发UI篇—在UIImageView中添加按钮以及Tag的参数说明

ios开发UI篇—在ImageView中添加按钮以及Tag的参数说明 一、tag参数 一个视图通常都只有一个父视图,多个子视图,在开发中可以通过使用子视图的tag来取出对应的子视图。方法为Viewwithtag: 提示点:在xib中如果想要通过tag参数获取对应的控件(属性),不要把tag的参数设置为0,因为xib中所有的对象默认tag都为0,设置为0取不...

iOS开发 字符串

iOS开发之玩转字符串 (转)这是另一个收藏的超链接 来自SegmentFault 大神的精品 下面这是一些常用的方法和属性 记得不牢所以收藏下 //一、NSString /*----------------创建字符串的方法----------------*///1、创建常量字符串。NSString *astring = @"This is a Strin...

makefile(一)

Makefile的一个具体的实例 来源:http://blog.sina.com.cn/s/blog_73d4d5fa0100paiy.html  (2011-03-06 23:10:02)转载▼ 标签: linux.makefile  杂谈 分类: Linux系统管理 工程中的代码分别存放在add/add_int.c、add/add_flo...