项目中的技巧经验汇总
1、 若将一个view作为子视图添加到window中,则当设备的方向变换时,该视图不会随之变化,也就是所不会响应设备的方向变化事件。
如:“图片放大视图”,“报纸选择视图”...
要使其响应方向变化事件,最好是将该视图添加到一个视图中而不是window中。
2、通过Interface Builder创建的视图默认的背景色是白色的,
要使得该视图透明,可以将其背景色改为clearcolor。
3、再viewcontroller的viewdidload方法中,self.view一直是nil的。
所以在viewdidload中使用[uiactionsheet showinview:self.view];就会使程序崩溃。
4、获取设备当前的放置方向,只要获取当前应用的状态条方向即可,如:
[self SetSubviewsFrame:[[UIApplication sharedApplication] statusBarOrientation]];
5、UIButton设置按钮图片的方式为:
[iButton setImage:[UIImage imageNamed:@"a.png"] forState:UIControlStateNormal];
而不能像下面这种方式:iButton.imageView.image = [UIImage imageNamed:@"a.png"];
6、对一个视图使用动画时,若该视图包含子视图(如按钮,图片等内容),要使得动画进行时子视图不变形,可添加如下代码:
[self setClipsToBounds:YES]; //这里self是view.
7、属于工程resource中的内容都是只读的,不能修改。
比如在我的项目中使用读取resource下的plist文件的内容,能获取到内容;
但将内容写进去就会失败,读出来仍然是原来的内容。
解决方法:
如果要写入plist,文件路径的获取就不能用
“ NSString *plistpath=[[NSBundle mainBundle]pathForResource:@"member" ofType:@"plist"];”(我原本这么写的,得到的路径是resource文件夹下的plist文件)。
正确的做法是将要保存的plist文件放在一个sandbox沙盒里,文件路径这样
“NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString* sandBoxpath = [NSString stringWithFormat:@"%@/%@",documentsDirectory,@"member.plist"];
”
我这样写入后,并且再读出,就成功了。
8、
1)如果对性能要求高,慎用Interface Build;
2)copy是创建,retain是引用;
3)加载到NSArray/NSMutableArray里的对象,不需要负责release;
4)UIApplicationDelegate负责应用程序的生命周期,而UIViewController负责View的生命周期;
9、 如果表格是在UIViewController里并且table的delegate是ViewController, 那么table必须是viewcontroller的view,而不是能是viewController 的view的一个子视图。
否则在表格编辑的时候就不会触发willBeginEditingRowAtIndexPath,以及 didEndEditingRowAtIndexPath等方法。
相关网页{http://www.flyblog.info/catprogramming/196.html}
10、用[NSMutableDictionary dictionary];方法初始化的 NSMutableDictionary类型对象,不需要release;也不需要用removeallobjects清空;
在再次用 [NSMutableDictionary dictionary]方法来初始化前,它会自动调用dealloc方法的。
11、在有tabbar的应用中使用nsnotification时,只有当前选中tab的viewcontroller才会接到通知,而其它tab是不会收到的。
12、在代码中有用到动画的地方要注意,由于动画的运行是有一个时间间隔的,故其内部实现机制其实是新开一个线程在执行的。所以在函数中用到动画的地方,一般动画之后的代码会先运行,等这个函数的所有代码执行完之后才开始运行动画。
这样就会造成界面的迟缓问题(如在做报纸选择器时让其动画隐藏,然后再开始下载报纸,而程序运行的顺序却是先下载报纸,之后才动画隐藏报纸选择器视图。)
或动画不执行的问题(如想让一个对象缓慢移动到某个位置,之后再变换其图片;而程序运行结果却是视图直接到达该位置并变换了图片,没有执行动画)。
这些问题的解决方法是:要给动画添加一个动画执行完之后处理方法,在该方法中进行动画之后的处理。
如:
[UIView setAnimationDidStopSelector:@selector(hiddenPanelStopped)];
当然不要忘了给该动画设置代理:
[UIView setAnimationDelegate:self];
一般的动画处理代码如下:
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:kDefaultAnimationInterval];
[UIView setAnimationCurve:UIViewAnimationCurveLinear];
[UIView setAnimationDelegate:self];
[UIView setAnimationDidStopSelector:@selector(hiddenPanelStopped)];
[self setFrame:hideRect];
[UIView commitAnimations];
13、一个视图中的子视图的tag可以设成相同,只要能在代码中识别出来就行。
如在报纸选择器中,其实可以将每个报纸按钮和new图标的tag设置成相同的,
这样,在代码中使用时,只要添加下该tag所指向的具体为哪个视图即可,如使用
[tempView isKindOfClass:[UIButton class]];
另一种做法是,将new图标和报纸按钮作为一组添加到一个视图中,再将这个视图添加到报纸选择器中。
14、tablecell高亮时可以考虑将其中字体的颜色换掉(如从黑色变为白色);
15、将应用屏幕限制在横屏的方法:
在应用进入时,先将应用设置为横屏模式:
[UIApplication sharedApplication].statusBarOrientation = UIInterfaceOrientationLandscapeLeft;
在屏幕旋转时,只响应横屏的变化:
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {return (interfaceOrientation == UIInterfaceOrientationLandscapeLeft || interfaceOrientation == UIInterfaceOrientationLandscapeRight);
}
16、获取字符串占用的尺寸:
CGSize detailSize = [@"你的字符串" sizeWithFont:[UIFont systemFontOfSize:15] constrainedToSize:CGSizeMake(200, MAXFLOAT) lineBreakMode:UILineBreakModeWordWrap];
17、将视图滚动到可见的实现:
// Scroll the |UIScrollView|s to display |view| on the screen.
- (void)scrollToVisible:(UIView *)view {
UIView *parent = [view superview];
while (parent) {
if ([parent isKindOfClass:[UIScrollView class]]) {
UIScrollView *scrollView = (UIScrollView *)parent;
CGRect rect = [view convertRect:[view bounds] toView:scrollView];
[scrollView scrollRectToVisible:rect animated:YES];
}
parent = [parent superview];
}
}
18、代码触发点击事件:
// Sends touch event to specified view. This method should be executed on main// thread.- (void)performTouch:(UIView *)view {// Make the view visible. [self scrollToVisible:view]; // Create touch event for the view. Note [touch view] has the topmost element// in the window. Tap event should be sent to the topmost element, not to the// specified view. UITouch *touch = [[[UITouch alloc] initInView:view] autorelease]; // The view should get focused. if ([[touch view] canBecomeFirstResponder]) { [[touch view] becomeFirstResponder]; } // Send touchesBegan and touchesEnded messages. NSSet *touches = [NSSet setWithObject:touch]; UIEvent *event = [[[NSClassFromString(@"UITouchesEvent") alloc] initWithTouch:touch] autorelease]; [[touch view] touchesBegan:touches withEvent:event]; [touch setPhase:UITouchPhaseEnded]; [[touch view] touchesEnded:touches withEvent:event];}
19、实现屏幕截图的代码:
UIGraphicsBeginImageContext(self.view.frame.size);CGContextRef context = UIGraphicsGetCurrentContext();[self.view.layer renderInContext:context];UIImage *image = UIGraphicsGetImageFromCurrentImageContext();UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil);UIGraphicsEndImageContext();
转载于:https://www.cnblogs.com/zhulin/archive/2011/03/01/1968306.html
项目中的技巧经验汇总相关推荐
- APP项目开发失败案例经验汇总
今天和大家分享一下之前碰到比较典型的APP项目开发失败案例,教训是残酷的,经验是宝贵的,整理了三个案例,如果大家看完觉得还行,给个辛苦赞~ 失败的外包案例(一) 项目名称:XXXAPP开发双版本 项目 ...
- vue 项目难点_vue项目中遇到的问题汇总
前:项目用到的技术栈为webpack+vue2.x+pug+stylus+elementUI 1.IE9中, 请求服务器数据并用v-for渲染option标签出现只显示第一个字的问题 解决方法: /* ...
- 使用git在项目中的一些经验
近期在使用gitLab管理项目,在使用过程中遇到一些问题,在此整理一下. git的基本配置在这里就不累赘了,主要讲一下如何将项目托管到gitLab ,并实现多人协作开发.尤其介绍一下如何解决冲突,合并 ...
- 项目管理手记(四) DRP项目中软件系统架构的比较
项目管理手记(四) DRP项目中软件系统架构的比较 Drate(at ...
- Auto CAD:CAD绘图设计以项目为导向,实战案例中图层、图块运用技巧经验总结之详细攻略
Auto CAD:CAD绘图设计以项目为导向,实战案例中图层.图块运用技巧经验总结之详细攻略 目录 CAD绘图设计以项目为导向,实战案例中图层运用技巧经验总结
- 在EXCEL表格中经常会遇到有合并单元格时,汇总计算的公式无法直接下拉自动填充计算,掌握这个小技巧一键汇总
在EXCEL表格中经常会遇到有合并单元格时,汇总计算的公式无法直接下拉自动填充计算,掌握这个小技巧一键汇总 目录 在EXCEL表格中经常会遇到有合并单元格时,汇总计算的公式无法直接下拉自动填充计算,掌 ...
- 初中高级的 git 和 gerrit 技巧【大型项目实战总结 CR 经验】
序 前半部分属于基础,后半部分属于进阶.从初级到中级再到我都 hold 不住的高级.全文共 12000 余字,超干超干的那种. 然而,写完一半的时候,我突然虎躯一震,我是不是在造轮子?随后我悄悄的搜了 ...
- 分享在实际项目中积累的硬件调试经验 - 调试方法,以及常见调试案例
文章目录 一.硬件调试的四个目标 二.硬件调试心得 三.一块新的板子的调试思路 四.硬件调试,一些网络资料 五.单片机硬件调试中常见的案例(杂记) 往期系列文章: 1.裸机项目开发经验分享 - 完整开 ...
- 年度巨献-WPF项目开发过程中WPF小知识点汇总(原创+摘抄)
WPF中Style的使用 Styel在英文中解释为"样式",在Web开发中,css为层叠样式表,自从.net3.0推出WPF以来,WPF也有样式一说,通过设置样式,使其WPF控件外 ...
最新文章
- C++ multimap 的使用
- java 校验姓名只能包含中英文_java代码验证用户名,支持中英文(包括全角字符)、数字、下划线和减号 (全角及汉字算两位),长度为4-20位,中文按二位计数...
- 下边框_山寨iPhone12Pro开箱:浴霸四摄更小,下边框有点宽
- 设计模式教程(Design Patterns Tutorial)笔记之一 创建型模式(Creational Patterns)...
- NoSql数据库确实非常适合网站
- 2020年浙江省土地利用数据(矢量)
- WordPress更新提示无法创建目录的解决方案
- 国内电影票务系统浅析
- 计算机机房空调设计规范,计算机机房空调设计规范
- 用java怎么实现多语言翻译_快速实现中文翻译多国语言
- git:info: detecting host provider for ‘https://gitee.com/‘...
- ARM学习笔记:HC-SR501人体红外传感器
- 六西格玛dfss_实施六西格玛设计(DFSS)的主要工具有哪些?
- crontab格式写错出现报错
- 如何彻底解决浏览器导航被劫持为www.hao123.com
- IDEA创建的maven项目没有src目录问题解决
- java项目中没有jdk包_彻底搞懂Java开发工具包(JDK)安装及环境变量配置
- 什么是耦合?耦合是什么意思?
- 终于解决大众点评的字体反爬了!
- 基于JavaWeb的影视评论网站设计与实现