ios项目模板全都默认使用.xib扩展名,但最初所有的界面构建器文件都使用.nib扩展名。
界面的实现三种方式:storyBorad、xib、纯代码;
storyBorad:由一组或多组相对应的视图和控制器构成;由场景(Sence)和过渡(segue)组成;缺点是多人开发时容易冲突,多使用xib;
Assets.xcassets目前,创建项目自动生成的资源目录,用来管理应用图标及其他图片;但Xode显示的是点数尺寸,而不是像素尺寸。这里的点数是指屏幕上的特殊尺寸。如:2x表示一点就是一个2x2像素的小格子;
3种分辨率:
资源分辨率:也就是资源图片的大小,单位是像素px
设计分辨率:逻辑上的屏幕大小,单位是 点pt;
屏幕分辨就:以像素为单位的屏幕大小;
- 用户界面控件共有三种基本模式:活跃、静态和被动
*控件的设置属性:
Hidden:是否可见
Clip Subviews:若视图包含一个子视图,且这个子视图完全包含在父视图中,则该选项用于决定子视力的绘制方式;若选中,那么只有位于父控件内部的子视图部分会被绘制出来;若不先,子视图会完全绘制出来,不管有没有在父视图内部;
可拉伸图像;在.xcassets资源目录中,可直接编辑图像;类似android中的.9.png;可只拉伸边缘部分(边缘图像),在Xcode5.0前只能使用代码拉伸,之后可使用工具直接拉伸;在.xcassets面板中选择右下角的Show Slicing按钮即可进行拉伸编辑模式;
*调整图像视图的大小:一般最好在运行前就做好缩放工作,因为运行时进行图像缩放需要消耗一些时间和处理器周期。
控制面板属性:
View->Interaction: User Interaction Enable:用于控制否能进行交互;
View->Interaction: Multiple Touch:是否能够接收多点触控,支持复杂的手持操作
View->Interaction: Drawing:
Opaque:默认选中,相当于告诉ios当前视图的背后没有需要绘制的内容,同时允许ios的绘图方式通过一些优化来加速当前视图的控制。
Hidden:是否隐藏
Clears Graphics Context:基本不选中,若选中,ios会在实际绘制对象前使用透明的黑色(#00000000)绘制被对象覆盖的所在区域。
Clip Subviews:若你的视图包含子视图,并且这些子视图没有完全包含在其父控件的边界内,那么这个复选框的值可以决定子视图的绘制方式,若选中,则只有父控制内部的部分会绘制出来。
Autoresize Subviews:在当前视图大小发生变化时自动调整子视图的大小;默认选中。
TextField:
Placeholder:占位符,可在输入一些文本,文本框的内容为空时,placeholder的内容会以灰色文本显示在文本框中。同android中的hint;
Clear Button:设置何时出现清除按钮;
Clear When editing begins:指定触摸此字段时是否清除已有的文本;
Adjust to Fit:可指定显示文本是否应随文本框的尺寸变化而变化;
Capitalisation Words:每个输入的单词首字母大写;
Auto-enable Return Key:若选中,在文本框为空时禁用return键;
Secure:是否显示已输入的字符;
弹出框:UIActionSheet,从底部弹出
对话框:UIAlertView,屏幕中间弹出
[在ios8都已过时,使用UIAlertController代替];
创建后调用下面方法显示:
[self presentViewController:alert animated:YES completion:]
建立约束:类似android中的layout的对齐及依靠方式;
Editor->Size to FitContent:将图像在视图的大小自动调整到与其中的图像完全一一致。
+屏幕旋转:
iPhone屏幕规格:4、4s都个320*480个点,5、5s是568个点,iPad是768*1024个点,状态栏是20个点。在早期 的iPhoe上点和像素是等价的,一个点就是一个像素。后随分辨率的提高,一个点的对应的像素也不一样,最新的iPhone是一个点代表4个点。
在Deployment Info中的Device Orientation中设置app可支持的屏幕方向。这是设置的是所有View支持的方向。
在storyboard上设定好控件后,一次选中所有控件在Editor->Resolve Auto Layout Issues->Add Missing Constraints即可对选中的控件添加约束,保证在屏幕旋转等情况下保持位置固定。
# pragma mark 设置当前view可支持的屏幕方向
-(UIInterfaceOrientationMask)supportedInterfaceOrientations{
return UIInterfaceOrientationMaskLandscapeLeft|UIInterfaceOrientationLandscapeRight;
}
#pragma mark 当屏幕旋转时调用
-(void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration{
//此方法中用于在屏幕方向改变后重新绘制控件新位置
}
- (void)viewDidLoad {
[super viewDidLoad];
//在视图加载完成后,取出屏幕初始方向
UIApplication *app=[UIApplication sharedApplication];
UIInterfaceOrientation *orientation = app.statusBarOrientation;
//根据初始方向处理屏幕控件
}
+视图切换 +页面跳转
使用View Switcher
根控制器:是用户看到的第一个控制器,负责管理当前向用户显示哪个视图。通常是UINavigationController 或UITabBarController的一个实例,也可是UIViewController的自定义子类。
** 另外还有:
UIPageViewController: 呈现电子书导航风格的控制器;
UISplitViewController:可以把屏幕分割成几块的视图控制器,主要用于Ipad屏幕设计;
UIPopoverController:浮动框;
在多视图应用中,每个视图控制器控制一个内容视图,应用的用户界面就是在这个内容视图中构建的。这样的组合的storyboard中被称为场景(sence)。每个sence都是同个视图控制器和(UIViewController)一个内容视图(UIView)构成。
a.分别创建两个UIViewController的子类;
b.在storyboard中创建两个View Controller并设置其Custom Class为对应的类;
c.设置创建的view Controller的Identity->Story board Id的值(字符串),并勾选Use Storyboard ID;
d.在根控制器中创建要切换的控制器的实例
instancetype 类型:可使那些非关联返回类型的方法返回所在类的类型!(不用转换类型)
与id类型区别:
相同点:都可以作为方法的返回类型
不同点:instancetype可以返回和方法所在类相同类型的对象,id只能返回未知类型的对象;instancetype只能作为返回值,不能像id那样作为参数;instancetype用来在编译期确定实例的类型,而使用id的话,编译器不检查类型, 运行时检查类型.(ARC下)
assign,strong,weak区别及使用场景:
assign: 用于非指针变量;如基础类型;
weak:新版本的assign,弱引用 ,一般UI控件用weak
strong:强引用,一般的变量使用;
在.h和.m文件中创建方法的区别:
在.h中的方法和成员默认是protect的,外部可通过对象访问;
在.m中的方法和成员都是私有的,外部都无法访问;
用直接访问变量和用self.访问变量的区别:
_a = b;是直接给成员_a进行赋值;
self.a = b;是调用的定义的setA的方法;封装性更好,而且对应使用的copy,retain等属性才能保证原来的set方法;(应该使用该种方式)
博客地址:IOS开发学习笔记(三)