Autolayout使用笔记

iOS6开始就引入了autolayout特性,使用autolayout进行自动布局确实方便了很多,下面是autolayout使用的一些心得。

查看更多

分享到 评论

横屏竖屏自适应总结

所有frame的高度和宽度应该通过superview的bounds计算。
xib中的view无法设置auto mask的必须通过代码设,不设定的话有时可以自动适应,但是有时会出现有部分黑屏的情况。
两边都不设置mask则为居中显示。

以下两方法为rotate是自动调用,如果该viewController没有navigationController时,以下两方法可能不被调用,需要自己加入通知中心。

1
- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation

调用此方法时superview.bounds已经改变

查看更多

分享到 评论

自定义UITextField背景

设置背景图片

1
2
UIImage *textFieldBgImage = [[UIImage imageNamed:@"textfield_bg.png"] stretchableImageWithLeftCapWidth:5 topCapHeight:5];
[self.textField setBackground:textFieldBgImage];

查看更多

分享到 评论

.net的DateTime时间格式转成NSDate

最近项目中用到的接口是.net写的,传过来的日期格式是 2013-04-10T10:36:48.787359+08:00 , 这么一大串想解析成NSDate格式还真不是一件容易的事,幸好已经有人把转换类写出来了。

查看更多

分享到 评论

Shecha Touch实例学习

通过前几篇文章的介绍,大家应该对Sencha Touch总体有了了解,现在已经可以开始做一些简单的应用。这一次我们要做的是一个简单通讯录应用。

查看更多

分享到 评论

使用Sencha Touch 2.1进行iOS开发 —— 项目文件结构及代码分析

从第一篇文章我们知道了如何通过sencha命令创建Sencha Touch项目,而创建的项目里面已经包含了不少文件,如要开始写代码,我们有必要先了解所创建项目的文件结构及代码。

查看更多

分享到 评论

使用Sencha Touch 2.1进行iOS开发 —— 类的定义与使用

类的定义

Sencha Touch有自己的类定义方式,我们先来看个例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
Ext.define('Animal', {
config: {
name: null
},
constructor: function(config) {
this.initConfig(config);
},
speak: function() {
alert('grunt');
}
});

上面我们简单地定义了一个Animal类,只有一个name属性和一个方法speak();

查看更多

分享到 评论

使用Sencha Touch 2.1进行iOS开发 —— 开发环境搭建

最近由于要用到Sencha Touch 2.1进行项目的开发,于是开始了对Sencha Touch的学习,学习Sencha Touch第一步当然是搭建开发环境。

开发环境搭建

Sencha iOS开发基本环境

分享到 评论

@class vs. #import,两种方式的讨论

很多刚开始学习iOS开发的同学可能在看别人的代码的时候会发现有部分#import操作写在m文件中,而h文件仅仅使用@class进行声明,不禁纳闷起来,为什么不直接把#import放到h文件中呢?

这是因为h文件在修改后,所有import该h文件的所有文件必须重新build,因此,如果把#import写在h文件中,import该h文件的文件也就会产生不必要的编译,增加编译时间,特别是在项目文件多的情况下。想象一下,如果只是修改一个h文件而导致上百个文件不必要的编译,那是一件多么让人纠结的事情。。。

对于@class只是告诉编译器有这个class,请不要报错或警告,因此不会给编译造成影响。

什么时候用@class这种方式声明比#import好呢?

stackoverflow上的高手们给了不少建议:

Randy Marsh:

When I develop, I have only three things in mind that never cause me any problems.

Import super classes
Import parent classes (when you have children and parents)
Import classes outside your project (like in frameworks and libraries)
For all other classes (subclasses and child classes in my project self), I declare them via forward-class.

Justin:

Simple answer: You #import or #include when there is a physical dependency. Otherwise, you use forward declarations (@class MONClass,struct MONStruct, @protocol MONProtocol).

Here are some common examples of physical dependence:

Any C or C++ value (a pointer or reference is not a physical dependency). If you have aCGPoint as an ivar or property, the compiler will need to see the declaration ofCGPoint.
Your superclass.
A method you use.

最后,我建议还是养成良好的import习惯,不要偷懒都把import放在h文件中,无论参与的项目大小,养成良好的编程习惯非常重要。

分享到 评论

更改navigationController push和pop界面切换动画

有时候我们需要自定义navigationController pushpop界面切换动画,用到的代码如下:

  • For Push:
1
2
3
4
5
6
7
8
MainView *nextView=[[MainView alloc] init];
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
[UIView setAnimationDuration:0.75];
[self.navigationController pushViewController:nextView animated:NO];
[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight forView:self.navigationController.view cache:NO];
[UIView commitAnimations];
[nextView release];
  • For Pop:

方法一:

1
2
3
4
5
6
7
8
9
10
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
[UIView setAnimationDuration:0.75];
[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft forView:self.navigationController.view cache:NO];
[UIView commitAnimations];
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDelay:0.375];
[self.navigationController popViewControllerAnimated:NO];
[UIView commitAnimations];

方法二:

可实现左右滑动动画,可设置滑动方向。

1
2
3
4
5
6
7
CATransition* transition = [CATransition animation];
transition.duration = 0.5;
transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
transition.type = kCATransitionFade; //kCATransitionMoveIn; //, kCATransitionPush, kCATransitionReveal, kCATransitionFade
//transition.subtype = kCATransitionFromTop; //kCATransitionFromLeft, kCATransitionFromRight, kCATransitionFromTop, kCATransitionFromBottom
[self.navigationController.view.layer addAnimation:transition forKey:nil];
[[self navigationController] popViewControllerAnimated:NO];

具体的动画参数请自行更改。

分享到 评论