您的位置:首页 > 其它

一年工作总结的零散的点(一)

2013-11-10 09:04 387 查看
1、

编译错误 compile error:

fatal error: file '/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator6.0.sdk/System/Library/Frameworks/UIKit.framework/Headers/UITableViewCell.h' has been modified
since the precompiled header was built

the answer of stackoverflow:

I had this exact same problem after applying the recent Xcode patch. I ended up deleting the DerivedData folder for my app at:

~/Library/Developer/Xcode/DerivedData/{project name + gobly-gook}

关于 this "~/Library/Developer/Xcode/DerivedData" directory

This directory contains built products and indexes for the project. It is OK to delete it because it only contains items generated by Xcode. Xcode will regenerate everything next time the project is opened.

之前我可能修改过那个头文件,然后引起这个错误。

2、
hitTest:withEvent:

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event;

// recursively calls -pointInside:withEvent:. point is in the receiver's coordinate system(递归调用 -pointInside:withEvent:函数)

- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event;

// default returns YES if point is in bounds

遍历父视图下的每个子视图 返回距离用户最近的(最上层的)并且point位置在view中的那个View。

3、

UIImageView设置好图片不设置frame ,这时将其加入到一个UIView实例上 则UIImageView会自动以自己的原大小(原像素)加入到UIView的左上角

4、

- (UIImage *)resizableImageWithCapInsets:(UIEdgeInsets)capInsets

UIEdgeInsetsMake(0.0f, 35.0f, 0.0f, 10.0f) 方向是 “上左下右”

这个函数是自动 将边缘内的矩形自动缩放大小。

5、

问题:xib not be opened could not read archive

哪也没动,同步了一下svn上的文件就出现了这个错误。是因为有人和你提交了相同的文件,导致你的文件可能被损坏或者怎样,处理的方法,我把本地下的xib文件删除,然后再次更新就没有这个问题了。
6、

关于图片旋转的问题:以前的总结备份到这里

1、先用最简单的生活中常用的方式去表示角度,比方说90度就是直角 angle=90;

2、设置旋转动画的时候

iv.transform=CGAffineTransformMakeRotation(M_PI)
#M_PI 就是π 3.1415926...#

以上这句话的作用就是让原图形旋转90度。 #旋转方向,如果旋转90或者90度以上,旋转方向会是逆时针旋转,反之为顺时针#

正常使用的情况iv.transform=CGAffineTransFormMakeRotation(angle*(M_PI/180.0f)); #这就是你想要旋转的角度angle#

-------针对时钟的情况

每过5分钟 分针会转过30度 即 每分钟分针转6度 每分钟时针转 0.5度(6.0/12.0f)12进制

要算几小时几分钟的角度 则把小时也转化成分钟算比较简单 直接乘以角度就OK了。
7、

关于

-(UIImage *)resizableImageWithCapInsets:(UIEdgeInsets)capInsets
- (UIImage *)stretchableImageWithLeftCapWidth:(NSInteger)leftCapWidth topCapHeight:(NSInteger)topCapHeight;
前者是在iOS5中新加入的方法,同时后者宣布过时。
它们的区别在于”填充物”的区别。。

一段测试代码:

//
UIImage * background=[[UIImage imageNamed:@"2.png"] stretchableImageWithLeftCapWidth:35.0f topCapHeight:10.0f];

//
UIImage * background=[[UIImage imageNamed:@"2.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0.0f, 35.0f, 0.0f, 35.0f)];

UIImageView * iv=[[UIImageView alloc]

initWithFrame:CGRectMake(0, 0, 200, background.size.height)];

iv.image=background;

[self.view addSubview:iv];

[iv release];
8、

问题 : "Unable to Open Project Project ‘++++’ cannot be opened because the project file cannot be parsed."

原因:关于SVN 上冲突的问题

参考: http://stackoverflow.com/questions/361799/xcode-unable-to-open-project-cannot-be-opened-because-the-project-file-canno
右键单击您的projectname.xcodeproj文件, projectname将是您的项目名称。 现在,右键点击后选择显示包内容 。 之后,文件在文本编辑器打开你的projectname.pbxproj 。 现在搜索的行<<<<<<< .mine , =======和>>>>>>> .r 。 例如,在我的情况下,它看起来喜欢这个

<<<<<<< .mine

9ADAAC6A15DCEF6A0019ACA8 /*…. in Resources */,

=======

52FD7F3D15DCEAEF009E9322 /*... in Resources */,

>>>>>>> .r269

现在删除这些

<<<<<<< .mine , =======和>>>>>>> .r线,

它会看起来像这样

9ADAAC6A15DCEF6A0019ACA8 /* BuyPriceBtn.png in Resources */,

52FD7F3D15DCEAEF009E9322 /* discussionForm.zip in Resources */,

现在,保存和打开您的Xcode项目,并构建它。 一切都会好起来

9、

修改图片后,提交代码,已提交的代码在自己的电脑上可以跑,但是别人同步之后就出现错误,

可能的原因是:自己那其实也不能跑 ,所以在自己测试的时候,

a / Xcode有一个clean的选项 那个不确定的话 也执行一下

b / 将测试机还有真机上的应用都删掉

c / 将Xcode下的DerivedData文件夹下的缓冲文件也删掉

d / 应该把缓冲文件都删除掉

e / 如果还有问题 则把刚修改过的文件解除关系 再重新添加一下

这样应该就不会有问题了。

10、

再一个UIView实例上 加另外一个UIView实例 (使用addsubview方法) 如果改变底层的alpha 则上层的alpha也会跟着改变

可以使用- (void)insertSubview:(UIView *)view belowSubview:(UIView *)siblingSubview; 这个方法将其放在下面。

原来在上面的UIView的实例就不会改变了。

参考这篇文章:http://mobile.51cto.com/iphone-282623.htm
11、

Debug体会:

之前调试程序一直都是打NSLog ,通过输出看程序运行到哪一步 几乎没有用过断点,单步调试 。今天顺平给调试了一下 (其实昨天帮我调试了一下。。我没太在意) 看那个调试 发现比NSLog方便了许多。

加断点非常方便,全速运行非常方便,单步调试非常方便!

最方便的是在outPut输出区域 可以 执行调试命令 po 打印OC对象

参考:http://blog.csdn.net/kesalin/article/details/7222153

调试技巧

po 命令:为 print object 的缩写,显示对象的文本描述(显示从对象的 description 消息获得的字符串信息)

print 命令:有点类似于格式化输出,可以输出对象的不同信息:

info 命令:我们可以查看内存地址所在信息

show 命令:显示 GDB 相关的信息。如:show version 显示GDB版本信息

help 命令:如果忘记某条命令的语法了,可以使用 help 命令名 来获取帮助信息。如:help info 显示 info 命令的用法。
12、

父视图会影响子视图的行为,改变父视图的尺寸会连带着改变子视图的尺寸和位置。

在这种情况下,你可以通过合适的配置视图来重定义子视图的尺寸。其他会影响到子视图的改变包括隐藏父视图,改变父视图的alpha值,或者转换父视图。

有关响应者链条 :视图层次的安排也会决定着应用如何去响应事件。在一个具体的视图内部发生的触摸事件通常会被直接发送到该视图去处理。然而,如果该视图没有处理,它会将该事件传递给它的父视图,在响应者链中以此类推。具体视图可能也会传递事件给一个干预响应者对象,像视图控制器。如果没有对象处理这个事件,它最终会到达应用对象,此时通常就被丢弃了。

APPLE 资源库中的文章: http://developer.apple.com/library/ios/#documentation/WindowsViews/Conceptual/ViewPG_iPhoneOS/WindowsandViews/WindowsandViews.html#//apple_ref/doc/uid/TP40009503-CH2-SW1
13、

问题:先增加了一个xib文件,后来又删除了,但是再编译就出现问题(删除之前没事)

"'NSInternalInconsistencyException', reason: '-[UIViewController _loadViewFromNibNamed:bundle:] loaded the "MyViewController" nib but the view outlet was not set.'"

解决:当你从工程中删除文件的时候,文件并没有从设备(模拟器)中删除,iOS还是会看见你的旧文件,你需要手动的将设备(模拟器)中的app删除掉,然后从新安装, 另一个方法是你重命名这个文件 。同时两个方法都要将工程中清理,或清除dievrie Data文件夹中的文件。

参考:http://stackoverflow.com/questions/10884640/added-then-deleted-a-ipad-xib-now-nsinternalinconsistencyexception-when-runni

14、

Code Sign error: Provisioning profile can't be found

一般是配置文件不正确引起的。从iTunes那下载一个或者从同事那拷贝一个。

15、UIButton setShowsTouchWhenHighlighted问题。

一段测试代码:关于按钮的高亮问题。
UIImageView * iv = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
iv.image = [UIImage imageNamed:@"1.png"];
iv.userInteractionEnabled = YES;
// 必须要打开它 (也就是button的父视图的交互属性)
[self.view addSubview:iv];
UIButton * b = [UIButton buttonWithType:UIButtonTypeCustom];
b.frame = CGRectMake(10, 10, 30, 20);
[b setImage:[UIImage imageNamed:@"1.png"] forState:UIControlStateNormal];
[b addTarget:self action:@selector(aa:) forControlEvents:UIControlEventTouchUpInside];
[b setShowsTouchWhenHighlighted:YES];
//设置点击高亮
[iv addSubview:b];
//必须把button放到UIImageView上去。
16、定义一些显示控件名字的时候,尽量保留这些控件的基本特性,比如继承于UIScrollView,UITableView.的控件的类名还有变量名要以ScrollView结尾。

MyScrollView….

17、一个视图 只有一个父视图,当该视图从 视图1 加入到视图2 后 它将不再是1视图的子视图 并且它不在1视图上继续显示。切记。

18、

//获得指定图片内的指定的屏幕图像
- (UIImage *)imageFromView: (UIView *) theView
{
UIGraphicsBeginImageContext(theView.frame.size);
// 创建一个位图基准的绘图上下文,并使它成为当前的上下文
CGContextRef context = UIGraphicsGetCurrentContext();
// 拿到当前上下文
CGContextSaveGState(context);
//当前图形状态的副本推到图形状态栈的上下文。
[theView.layer renderInContext:context];
//用theView.layer 给指定的上下文 着色
UIImage *theImage = UIGraphicsGetImageFromCurrentImageContext();
//获得当前上下文的图片
UIGraphicsEndImageContext();
//把当前的位图的上下文,从上下文栈顶移走
return theImage;
}

19、

把tableView上的整个row的图给截下来,需要将tableView嵌入到scrollView里面,并且让scrollView的大小等于tableView全部显示的大小。这样tableView就能全部显示,可以直接将tableView 传入函数:

- (UIImage *)imageFromView: (UIView *) theView
{
UIGraphicsBeginImageContext(theView.frame.size);
// 创建一个位图基准的绘图上下文,并使它成为当前的上下文
CGContextRef context = UIGraphicsGetCurrentContext();
// 拿到当前上下文
CGContextSaveGState(context);
//当前图形状态的副本推到图形状态栈的上下文。
[theView.layer renderInContext:context];
//用theView.layer 给指定的上下文 着色
UIImage *theImage = UIGraphicsGetImageFromCurrentImageContext();
//获得当前上下文的图片
UIGraphicsEndImageContext();
//把当前的位图的上下文,从上下文栈顶移走
return theImage;
}

得到整个tableView的位图。

判断一个tableView是否全部显示完毕,用函数
-(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath

在里边判断(indexPath.row 和
要显示的所有row数 )是否相等,如果相等
则显示完毕了

注意:比如你往上拉了下tableView,又往下拉了下tableView并见底了
那么该函数会再次执行的。

20、

判断一个字串中是否和另一个相等 用一下方法

[str1 caseInsensitiveCompare: str2] == NSOrderedSame

参考:http://stackoverflow.com/questions/8001643/how-to-best-compare-two-nsstring-objects-while-ignoring-case

用equalTo也行吧。。

21、

测试函数



理解convertRect:toView:, convertRect:FromView

Demo:

UILabel * label = [[UILabel alloc] initWithFrame:CGRectMake(200, 100, 100, 100)];

label.text = @" father";

[self.view addSubview:label];

NSLog(@"label.frame = %@",NSStringFromCGRect(label.frame));

[label release];

UILabel * testLabel = [[UILabel alloc] initWithFrame:CGRectMake(20, 20, 50, 50)];

testLabel.text = @"test";

[label addSubview:testLabel];

NSLog(@"testLabel.frame = %@",NSStringFromCGRect(testLabel.frame));

[testLabel release];

CGRect newFrame = [label convertRect:testLabel.frame toView:self.view];

NSLog(@"newFrame = %@",NSStringFromCGRect(newFrame));

testLabel.frame = newFrame;

[self.view addSubview:testLabel];

2012-12-05 19:04:45.645 test[14465:c07] label.frame = {{200, 100}, {100, 100}}

2012-12-05 19:04:45.647 test[14465:c07] testLabel.frame = {{20, 20}, {50, 50}}

2012-12-05 19:04:45.648 test[14465:c07] newFrame = {{220, 120}, {50, 50}}

上边俩坐标的和等于下边

但是要注意 这是这三个View必须是在层次关系上相互挨着的。
22、

数据不同的时候,查看内存地址 是否相同 是个最直接的方法

23、

- (void)scrollViewDidEndDecelerating //结束 减速

- (void)scrollViewWillBeginDecelerating //开始 减速

注意 这两个函数的执行时机

手动拖动时,这两个函数不会执行的。

在egofresh上两个函数

先执行:

scrollView.contentInset = UIEdgeInsetsMake(64.0f, 0.0f, 0.0f, 0.0f);

多出来的64 .0f 算做scrollView的content (其实本来就是加到scrollView上的)

并且执行完毕后 scrollView的contentOffset变成了 64.0f,这也就是为什么当你再往上拉,它没有重复叠加,还是显示64的高,

其实这个函数的本质就是改变contentOffset把围绕在原来scrollView周围的content拿来显示. 此时contentSize并不改变!

再执行:

[scrollView setContentInset:UIEdgeInsetsMake(0.0f, 0.0f, 0.0f, 0.0f)];

scrollView的content还原 会看到scrollView向上移动的过程

但是这个过程中 会触发

-(void)scrollViewDidScroll 函数

只要scrollView的contentOffset改变 那么-(void)scrollViewDidScroll 必然执行

并不会触发

- (void)scrollViewDidEndDecelerating 这个函数 而且 scrollView的 offset也根本不会改变,改变的只是scrollView.content.size

--切记
24、

myImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"1.png"] highlightedImage:[UIImage
imageNamed:@"1_highlighted.png"]];

myImageView.highlighted = YES

上一行代码设置的时候,记得要设置下一行代码. 也是很容易出的错误。
25、

UIImageView的一些属性和方法

用于:一个播放序列帧的程序,第一时间想起来的就是apple中UIImageView的属性animationImages,将一系列帧添加到一个数组里面,然后设置animation一系列属性,如动画时间,动画重复次数
Animating Images

property
animationImages
property highlightedAnimationImages
property animationDuration
property animationRepeatCount

method
-startAnimating
method
– stopAnimating
method
– isAnimatin

26、iv.contentMode属性的作用。

// 1.png 46*52
UIImageView * iv = [[UIImageView alloc] initWithFrame:CGRectMake(50, 50, 40,
100)];
iv.backgroundColor = [UIColor yellowColor];
iv.contentMode = UIViewContentModeScaleToFill;
iv.image = [UIImage imageNamed:@"1"];
[self.view addSubview:iv];
self.view.backgroundColor = [UIColor blueColor];
[iv release];

当iv.contentMode = UIViewContentModeScaleAspectFill;
当iv.contentMode = UIViewContentModeScaleAspectFit;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: