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

项目中的技巧经验汇总相关推荐

  1. APP项目开发失败案例经验汇总

    今天和大家分享一下之前碰到比较典型的APP项目开发失败案例,教训是残酷的,经验是宝贵的,整理了三个案例,如果大家看完觉得还行,给个辛苦赞~ 失败的外包案例(一) 项目名称:XXXAPP开发双版本 项目 ...

  2. vue 项目难点_vue项目中遇到的问题汇总

    前:项目用到的技术栈为webpack+vue2.x+pug+stylus+elementUI 1.IE9中, 请求服务器数据并用v-for渲染option标签出现只显示第一个字的问题 解决方法: /* ...

  3. 使用git在项目中的一些经验

    近期在使用gitLab管理项目,在使用过程中遇到一些问题,在此整理一下. git的基本配置在这里就不累赘了,主要讲一下如何将项目托管到gitLab ,并实现多人协作开发.尤其介绍一下如何解决冲突,合并 ...

  4. 项目管理手记(四) DRP项目中软件系统架构的比较

    项目管理手记(四) DRP项目中软件系统架构的比较                                                                   Drate(at ...

  5. Auto CAD:CAD绘图设计以项目为导向,实战案例中图层、图块运用技巧经验总结之详细攻略

    Auto CAD:CAD绘图设计以项目为导向,实战案例中图层.图块运用技巧经验总结之详细攻略 目录 CAD绘图设计以项目为导向,实战案例中图层运用技巧经验总结

  6. 在EXCEL表格中经常会遇到有合并单元格时,汇总计算的公式无法直接下拉自动填充计算,掌握这个小技巧一键汇总

    在EXCEL表格中经常会遇到有合并单元格时,汇总计算的公式无法直接下拉自动填充计算,掌握这个小技巧一键汇总 目录 在EXCEL表格中经常会遇到有合并单元格时,汇总计算的公式无法直接下拉自动填充计算,掌 ...

  7. 初中高级的 git 和 gerrit 技巧【大型项目实战总结 CR 经验】

    序 前半部分属于基础,后半部分属于进阶.从初级到中级再到我都 hold 不住的高级.全文共 12000 余字,超干超干的那种. 然而,写完一半的时候,我突然虎躯一震,我是不是在造轮子?随后我悄悄的搜了 ...

  8. 分享在实际项目中积累的硬件调试经验 - 调试方法,以及常见调试案例

    文章目录 一.硬件调试的四个目标 二.硬件调试心得 三.一块新的板子的调试思路 四.硬件调试,一些网络资料 五.单片机硬件调试中常见的案例(杂记) 往期系列文章: 1.裸机项目开发经验分享 - 完整开 ...

  9. 年度巨献-WPF项目开发过程中WPF小知识点汇总(原创+摘抄)

    WPF中Style的使用 Styel在英文中解释为"样式",在Web开发中,css为层叠样式表,自从.net3.0推出WPF以来,WPF也有样式一说,通过设置样式,使其WPF控件外 ...

最新文章

  1. C++ multimap 的使用
  2. java 校验姓名只能包含中英文_java代码验证用户名,支持中英文(包括全角字符)、数字、下划线和减号 (全角及汉字算两位),长度为4-20位,中文按二位计数...
  3. 下边框_山寨iPhone12Pro开箱:浴霸四摄更小,下边框有点宽
  4. 设计模式教程(Design Patterns Tutorial)笔记之一 创建型模式(Creational Patterns)...
  5. NoSql数据库确实非常适合网站
  6. 2020年浙江省土地利用数据(矢量)
  7. WordPress更新提示无法创建目录的解决方案
  8. 国内电影票务系统浅析
  9. 计算机机房空调设计规范,计算机机房空调设计规范
  10. 用java怎么实现多语言翻译_快速实现中文翻译多国语言
  11. git:info: detecting host provider for ‘https://gitee.com/‘...
  12. ARM学习笔记:HC-SR501人体红外传感器
  13. 六西格玛dfss_实施六西格玛设计(DFSS)的主要工具有哪些?
  14. crontab格式写错出现报错
  15. 如何彻底解决浏览器导航被劫持为www.hao123.com
  16. IDEA创建的maven项目没有src目录问题解决
  17. java项目中没有jdk包_彻底搞懂Java开发工具包(JDK)安装及环境变量配置
  18. 什么是耦合?耦合是什么意思?
  19. 终于解决大众点评的字体反爬了!
  20. 基于JavaWeb的影视评论网站设计与实现

热门文章

  1. SAP MM 103 + 105 移动类型组合初探
  2. 一文概览深度学习中的五大正则化方法和七大优化策略
  3. 开始即结束,Meta元宇宙OS要黄?
  4. Science:细胞如何测量自身的大小?答案是:DNA含量
  5. 普华永道:AI规模化应用,基础知识先行
  6. 学术研究发现英特尔 CPU 存在新漏洞
  7. 人工智能和自然智能能否交汇?李飞飞对话斯坦福神经生物学教授Bill Newsome
  8. 前沿研究丨基于驾驶脑的智能驾驶车辆硬件平台架构
  9. 全文详解:「深度学习」如何协助处理医疗中的「数据难题」
  10. 饿了么四年、阿里两年:研发路上的一些总结与思考