iOS开发基础----OC/UI控件

1. 前缀—> 只是代码组合之后,用来区分谁写的代码

2. 工具包frameworks 总共4个工具包,前3个是经常用的,最后一个是测试用的。

3. iphone 6 的SDK 是建立在 ios 8.0以上的

4.ios的界面虽然发生了改变,但还是从main.m中执行的,只是main.m没有放在导航区,而是放在Supporting Files 分组中。注意不是文件夹,是分组。

main.m里有这个

return UIApplicationMain(argc, argv, nil, NSStringFromClass([ZYAppDelegate class]));

main开始执行,但是会指引应用程序从一个类名为ZYAppDelegate 的类开始执行。

[email protected]  属性描述,是为了将来打点调用

@property(性质)属性一旦被@property描述过后,他就相当于声明了一套完整的set get方法。同时也相当于声明了一个全局的属性(变量)

@property放在属性之后,比如 @property  int   age =  setAge +  getAge 这两个方法的声明;

@synthesize(合成,综合)相当于把@property描述过的属性方法实现了一下,比如 @synthesize  age  = setAge + getAge  这两个方法的实现。

这两个是配套使用的,缺一不可。如果在 .m 中缺少@synthesize,可以在属性名前面加“_”或者“  self.    ”

在定义全局变量的时候,在“{  }”中没有定义变量名,而在后面直接用@property 定义属性,这样系统在.m中会自动的在变量名前加“_”。所以全局变量都要以“_”开头。

@synthesize age =  _age 中的 = 号没有实际意义,_age 只是方法内操作的属性。

代码规范:属性(之前记得是全局变量,改一下说法) 以下划线 开头。

属性的描述可以简化成一行,最好按照一行的方式来写。

属性的描述只是声明对应属性的set和get方法,不一定方法名和属性名相同,但是方法中操作的还是属性变量。

7.

<UIApplicationDelegate>实现协议

UIApplicationDelegate 协议名

还有一种   retain  ????

(strong, nonatomic) 属性的描述里面加的 修饰,

nonatomic(非原子性)  主要是为了(线程 安全) ,线程主要是程序的执行。软件有多个线程,执行某一个任务可以有多个线程,在访问某个东西(比如元素的属性)的时候,为了属性的安全,一个线程一个线程的访问。有点类似 提款机,一个人操作某一项的时候,其他人不能再操作,会出现问题,不能同时操作。

10.创建一个window 对象,并且初始化 它的坐标和大小,大小是当前屏幕的大小

11.ZYAppDelegate   叫“入口类”

入口方法

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

//  应用程序已经完成启动,此方法会自动调用

应用程序的方法,只在某些情况下会调用。(比如在里面各加一句话,就可以在控制台看到方法调用情况)

//应用程序将要失去激活状态

- (void)applicationWillResignActive:(UIApplication *)application

//  应用程序已经进入背景(后台)

- (void)applicationDidEnterBackground:(UIApplication *)application

//  应用程序将要进入前台(就是打开应用程序的过程)

- (void)applicationWillEnterForeground:(UIApplication *)application

//  应用程序已经成为激活状态

- (void)applicationDidBecomeActive:(UIApplication *)application

//  应用程序将要终结

- (void)applicationWillTerminate:(UIApplication *)application

12.  iphone没有“退出”键

13. CoreGraphics 核心绘图,缩写为CG

14. NO variable 是ARC 的原因

15.

子类的对象可以赋给父类的指针

People * m = [[ Man alloc ] init ];     编译警告,运行没错

Man * m = [[ People alloc ] init ];   编译警告,运行错误

第一个, m只是一个指针,指向一个地址,分配的是子类的对象

第二个,m也是一个指针,分配的是 父类的对象,假如调用一个子类的方法,就会出错。

例子:

[self.window addSubview: label]  ,其实这就是把子类对象( label )赋给父类(UIView *)。

17. UIViewController 继承于 UIResponder

—————————————————————————————————————————————————

18、9大基本数据类型

//    Byte:字节类型   ,1字节

//    BOOL:布尔型 (YES ,1;NO ,0) ,1字节

//    char:字符型  1字节

//    short:短整型 ,2字节                %d

//    int:整型 ,4字节                         %d

//    long:长整型,4字节(32位机,4字节;64位机 8字节)   %d

//    long long:长长整型 ,8字节

//    float :单精度浮点型,4字节           %f

//    double :双精度浮点型,8字节

//   1 Byte  无符号 (正数) 范围 0 ~ 255 (2^8 -1)

//           有符号(存在负数)  -127 ~ 128

//    0000 0000     0

//    1111 1111     255

//    int   4个字节 4 * 8 =32bit

//    0 ~ 2^32 - 1

%c 一个单一的字符

%d 一个十进制整数

%i一个整数

%e, %f, %g 一个浮点数

%o 一个八进制数

%s 一个字符串

%x 一个十六进制数

%p 一个指针

%n 一个等于读取字符数量的整数

%u 一个无符号整数

%[] 一个字符集

%% 一个精度符号

对象类型     %@              内存地址  %p

19、布尔型的用 BOOL 来定义。

20、方法名命名规则:首字母小写,后面的每个单词首字母大写。

工程命名规则:首字母大写,后面的每个单词首字母都大写。

21、(-)号方法,也叫实例方法,由类的对象去调用,(+)号方法,也叫类方法,由类去调用。

22、多参数方法的定义:-(void)方法名:(参数类型)参数名称  第二个参数的别名:(参数类型)参数名称;

23、.h:header 头文件,声明属性、方法

.m:main 主文件,方法的实现

24、单行注释的快捷键Win+/,多行注释/* */

25、@end 为类声明结束的关键字

26、@interface Student : NSObject  ,student为NSObject 的子类

27、使用一个类,必须先导入头文件

28、打点调用和[ ]方法调用

zhangSan.age = 18 ;

[zhangSan setAge:18];

30、调用父类中的初始化方法           self = [super init];

31、子类里面 不能再声明和父类一样的属性,可以声明和父类同名的方法

/*继承:

1)子类可以继承父类所有的属性、方法(父类有的,子类都有);

2)子类可以重写父类的方法;

3)子类可以扩充自己特有的属性、方法;

*/

32、

ipad1,2 : 1024 * 768   9.7寸

ipad3 ,4 : 2048 * 1536

ipad mini :1024 * 768    7.9寸

ipad mini :(retina)2048 * 1536

ipad air (ipad 5) :2048 * 1536   9.7寸

ipad air 2  2048 * 1536   9.7寸

模拟器: 1024*768

iphone                                                   模拟器尺寸(编程)                 真机分辨率:

simulator                           device

iPhone 4 4s(3.5 inch)                             320*480 points                           640*960 px

iPhone 5 5s 5c(4 inch)                     320*568       640*1136

iPhone    6   4.7inch   375*667         750*1334

iPhone    6 plus   5.5inch   540*960         1080*1920

34、双击获得一个目标,三击获得整行目标

—————————————————————————————————————————————————

35、UIlabel :UIView

UILabel * 标签名= [[UILabel alloc]init];

标签名.frame = CGRectMake(x,y,宽,高);

//  UILabel * 标签名 =[[UILabel alloc]initWithFrame : CGRectMake(x,y,宽,高)];

标签名.text = @“标签名称”;

标签名.font = [UIfont  systemFontOfSize:字体号];

标签名.textcolor = [UIcolor 颜色];

标签名.backgroundColor = [UIcolor 颜色];

标签名.shadowColor = [UIColor  颜色] ;      // 设置阴影颜色

标签名.shadowOffset = CGSizeMake(1,1) ;   // 设置阴影的偏移量

标签名.textAlignment = NSTextAlignmentCenter;(默认为左对齐)

标签名.numberOfLines = 0;  默认一行,0表示无数行,只有设置了行数,才可以换行。

[self.window addSubview:标签名];

字符串1 = [字符串2  stringByAppendingString : 字符串3] ;//给字符串添加一个字符串

36、UIImageView:UIView

UIImageView * 图片框名 = [[UIImageView alloc]init];

图片框名.frame = CGRectMake(x,y,宽,高);

图片框名.image = [UIImage imageNamed:@“图片名称.png”];

[self.window addSubview:图片框名];

37、UITextField:UIControl:UIView

UITextField * 文本框名 = [[UITextField alloc]init];

文本框名.frame =CGRectMake (x,y,宽,高);

文本框名.borderStyle = UITextBorderStyleRoundRect;  //RoundedRect  圆角矩形

文本框名.placeholder = @“提示信息”;

//  提示   默认设置之后 显示的是浅灰色(70%灰色),当输入内容时,自动消失。

文本框名.secureTextEntry = YES ;      //安全的文本输入,用于输入密码

//设置键盘类型

文本框名.keyboardType = UIKeyboardTypeNumberPad(键盘类型);

//给textfield绑定一个事件

[文本框名  addTarget:self action:@selector(keyboardDown)forControlEvents:UIControlEventEditingDidEndOnExit];

//  UIControlEventEditingDidEndOnExit

//  在文本框中,点击键盘上的return 键,结束文本框的编辑,这样键盘会自动的下去。

[self.window addSubView:文本框名];

38、UIbutton:UIControl:UIView

UIButton * 按钮名 = [[UIButton alloc]init] ;默认按钮的类型为Custom,而且只能是Custom//不建议用这种方式创建UIButton,也不一定

按钮名.frame = CGRectMake(x,y,宽,高);

按钮名 .background = [UIColor 颜色];

[按钮名  setTitle:@“状态名称1”forState: UIControlStateNormal];

[按钮名 setTitle:@“状态名称2”forState: UIControlStateHighlighted];

[按钮名  setImage:@“图片1”forState: UIControlStateNormal];

[按钮名 setImage:@“图片2”forState: UIControlStateHighlighted];

[按钮名  setBackgroundImage:[UIImage imageNamed:@“图片名 称.png”]forState: UIControlStateNormal];

[按钮名 addTarget :(代理对象,一般为self) action : @selector(方法名)forControlEvents:(UIControlEventTouchUpInside)] ;

[self.window addSubview :按钮名];

//  addTarget 是UIControl的方法

//  UIImage  图片类  UIImage : NSObject

//  @property(nonatomic,readonly) UIButtonType buttonType;

//  readonly 只读  只有get方法,没有set方法

//  +buttonWithType: 创建按钮对象,并且指定类型

//  UIButtonTypeSystem

//  standard system type 标准的系统类型

//  iOS 7.0之前 拟物化 RoundedRect

//  从iOS 7.0之后 弃用 RoundedRect 用system代替。

//  设置按钮在不同状态下的标题 标题的颜色默认是白色

39、button的另一种形式(这种形式创建的按钮)

UIButton * 按钮名 =[UIButton buttonWithType: UIButtonTypeRoundedRect或UIButtonTypeSystem];

//按钮名.buttonType = UIButtonTypeContactAdd;   这个句子有错误,buttonType为只读属性,不能赋值

40、键盘下去的

1?? [self.window endEditing :YES];

2??[ 文本框名  resignFirstResponder];

让文本框失去第一响应者,对于文本框来说,第一响应是键盘上来,失去第一响应,即让键盘下去

对应的是 becomeFirstResponder  ,这两个方法是 UIResponder  的方法 。同时UIView也继承于UIResponder

41、触屏的四种方式

-(void)touchesBegan:(NSSet *)touches withEvent : (UIEvent *) event

{

NSlog(@“触屏开始了”);

}

-(void) touchesEnded : (NSSet * )touches withEvent : (UIEvent * ) event

{

NSlog(@“触屏结束了”);

}

-(void) touchesMoved : (NSSet * )touches withEvent : (UIEvent * ) event

{

NSlog(@“触屏移动了”);

}

-(void) touchesCanelled : (NSSet * )touches withEvent : (UIEvent * ) event

{

NSlog(@“触屏取消了”);

}

42、产生随机数

arc4random();   unsigned int 无符号整形

43、让window可见

[self.window makeKeyAndVisible];

45、

获得输入框中的内容    NSString * 字符串名 = 输入框名.text;

把字符串转换成整数    Int 整数名 = [字符串名   intValue];

———————————————————————————————

46、判断字符串是否相等

isEqualToString

47、警示框 UIAlertView

UIAlertView * 警示框名 = [[UIAlertView alloc] initWithTitle:@“标题” message: @“警示信息”delegate: 代理对象(一般为self) cancelButtonTitle:@“取消”

otherButtonTitles:@“确定”,…,nil

[alert show];

48、从父视图中移除视图     [视图名   removeFromSuperview]

49、UIView的动画     (帧动画),动画只是一种过渡效果

//开启动画

[UIView beginAnimations:nil context:nil];

//动画的持续时间

[UIView setAnimationDuration:2];

//动画的代理方法

[UIView setAnimationDelegate:self];

//动画内容

view.frame = CGRectMake(280, 400, 40, 60);

//alpha 透明度  0-1

view.alpha = 0.8;

NSLog(@"没有真结束");

//动画停止(只有调用动画停止方法,动画才真正停止)

[UIView setAnimationDidStopSelector:@selector(jieshu)];

//提交动画

[UIView commitAnimations];

[UIView beginAnimations:nil  context: nil  ];

[UIView setAnimationDuration:时间];

[UIView setAnimationDelegate:self ];

// 设置动画翻转样式

[UIView  setAnimationTransition :UIViewAnimationTransitionFlipFromLeft    forView:( 针对那个视图,一般为self.window )cache:(缓存YES /NO)];

// 如果cache设置成NO,则对于执行动画的转换过程中,会对每一帧图片进行更新,而且这种更新可能会明显的影响帧的速率。例如uiview上的按钮会慢慢显示出来,而不是一下子就显示出来

//设置动画运动方式

[UIView setAnimationCurve : UIViewAnimationCurveEaseOut ] ;

// (UIViewAnimationCurve)curve      弯曲   Ease 缓慢 舒缓

// UIViewAnimationCurveEaseInOut,   在开始和结束的时候运动慢 // slow at beginning and end

//    UIViewAnimationCurveEaseIn,  在开始的时候运动慢 // slow at beginning

//    UIViewAnimationCurveEaseOut,  在结束的时候运动慢  // slow at end

//    UIViewAnimationCurveLinear,   Linear 直线  匀速运动

[UIView setAnimationDidStopSelector:@selector(方法名)];

//动画自动转向

[UIView setAnimationReapetAuthoreverses : YES/NO ];

[UIView commitAnimations];

注:动画代理方法和停止是配套的,开启动画和提交动画是配套的

//动画延时方法

[self  performSelector:@selector(方法名)  withObject:( id ) afterDelay: ( NSTimeInterval ) ];

2.另一种创建数组图片动画的方式

对象名.animationImages = [[NSArray alloc]initWithObjects : [UIImage imageNamed:@“图片1”],[UIImage imageNamed:@“图片2”],nil ] ;  //这种数组里只能包含图片对象

对象名.animationDuration = 间隔时间;

对象名.animationRepeatCount = “循环次数,0代表无限循环”;

[对象名  startAnimation] ;

//  [对象名  stopAnimation]  ;

50、alpha 透明度   0 -1

51、定时器 NSTimer

[NSTimer scheduledTimerWithTimeInterval:(间隔时间) target:(目标,一般为self) selector :@selector(方法名) userInfo :(用户信息,一般为nil) repeater:(YES/NO)];//NO只会执行一次

//调用fire方法会让timer立即执行,不会等待第一次的间隔时间

[定时器名 fire] ;   // 这句话是让执行到定时器的时候,立即开启定时器

//让定时器暂停  [定时器名  setFireDate:[NSDate distantFuture]];

//让定时器开始  [定时器名  setFireDate:[NSDate distantPast]];

//让定时器停止   [定时器名 invalidate];

52、数组(可变、不可变)

不可变数组(NSArray):当你初始化的必须要给它指定里面的元素,而且不能删除里面的元素,也不能创建完成之后再向里面添加新的元素,跟它对应的是可变数组(NSMutableArray)

不可变数组 NSArray,initwithobjects用多个对象初始化数组

NSArray * 数组名 = [[NSArray alloc]initWithObjects :@“数组成员1”,@“数组成员2”,nil ];

NSLog(@“%@”,数组名);   //  取所有数组成员

/*取某一个对象

NSString * 字符串名 = [数组名 objectAtIndex : 数组索引值] ;

NSLog(@“%@”,字符串名);

可变数组 NSMutableArray

NSMutableArray * 数组名 = [[NSMutableArray alloc]initWithCapacity : 数组容量,可设置为0,随着数组容量的增加而增加。

[数组名 addObject: 对象名];

//在某一个位置添加对象

[数组名 insertObject :对象名 atIndex: 索引值];

//移除数组中的某一个对象

[数组名 removeObject :对象名];

//返回数组中元素的个数

[数组名 count];

53、拼接字符串的方法 stringWithFormat

NSString * 变量1 = [NSString stringWithFormat : @“图片名 %d ”, i  ] ;

UIImage * 变量2 = [UIImage imageNamed : 变量1] ;

将上面的两行合并起来

UIImage * 变量2 = [UIImage iamgeNamed:[NSString stringWithFormat:@“图片名 %d”, i  ]] ;

[数组名  addObject : 变量2 ] ;

54、泛型遍历数组

for (NSObject * object  in  数组名)

{

语句1;

}

55、(NSSet *)中的NSSet 是一个集合, touches 屏幕中点的集合

56、tag值,UIView固有的属性,默认为0, 最好不要设置为 0

57、bounds 是以自身为参照坐标,自身的左上角为(0,0)

————————————————————————————————————

58、获取按钮的tag值,并创建一个指针按钮来指向它

UIButton * 按钮名 = (UIButton *)[self.window  viewWithTag : tag值] ;

59、猜数字游戏:两个按钮绑定同一个方法,有2种方式实现区分按钮操作,(设置静态变量static  i)(设置tag值)

————————————————————————————————————————————

60、self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

//当前类有一个window属性

//window:窗口(视图)UIWindow  父类是UIView

//创建一个UIWindow类型的对象 ;

//初始化的时候,有一个参数 frame

//frame :window的大小和位置;

//[UIScreen mainScreen]:获得手机的主屏幕  screen:屏幕

//bounds:大小 ;boundary:边界

//    [[UIScreen mainScreen] bounds]

//创建一个window,大小为当前屏幕的大小

61、

/*

struct:结构体

rect(x,y,width,height)     point:坐标点(x,y)       size:大小(width,height)

struct CGRect

{

CGPoint origin;

CGSize size;

};

struct CGPoint

{

CGFloat x;  float  x坐标

CGFloat y;   y坐标

};

struct CGSize

{

CGFloat width;  //宽

CGFloat height;  //高

};

*/

64、设置图片 UIImage iOS设备上图片的默认类型为png,所以当图片的名称后缀为png时,可以不写;

55、Button,   当setImage 和setTitle同时存在时,如果图片把button填充完整,那么就不显示标题;setTitle 和 setBackgroundImage  标题和背景图片可以共存

66、label默认字号大小为17号

67、[button addTarget:self action:@selector(buttonClick) forControlEvents:UIControlEventTouchUpInside];

//点击button的时候,要有对应的触发事件;

//当点击button的时候,buttonClick方法被调用执行一遍 ;

//第一个参数:指明当点击button时,由谁去执行对应的触发事件

//第二个参数:指明当点击button时,触发的事件(方法)的名称; @selector(方法名称)

//第三个参数:指明什么情况下,去调用方法;

//谁在什么情况下,调用哪个方法;

//self:当前类的对象;让当前类的对象去调用buttonClick方法;

//UIControlEventTouchUpInside:点击button然后松开的时候调用方法;forControlEvents:控件类型

68、方法体在哪个类的.m文件中写,方法就是哪个类的方法

70、Company identifier 公司标识符,一般用反域名,比如com.baidu

———————————————————

1、-(id)initWithAge:(int)aAge

{

//self:自己   当前类中调用这个方法的对象;

//super:父类

//    [super init] ;调用父类中的初始化方法;

//NSNumber  类簇:类的集合

self = [super init]; //完成父类的初始化操作

//如果self不为空

if (self)   // 如果父类初始化成功,则。。。进行子类的初始化操作

{

//个性化的操作

age = aAge ;

}

//最终 返回 self ;

return self ;// 返回类型是ID类型,所以这里是self

}

————————————————————————————————————————————

73、unrecognized selector sent to instance 这个对象调用了一个没有的方法

75、 另一种创建UIImage的方法

//只要告诉图片的名字,会自动帮你找到图片的路径并加载他。

//使用这种方式加载图片系统会自动的缓存图片,下次再加载相同名字的图片的时候,就不会从硬盘读取,而是直接读取缓存,速度更快。但是坏处是图片会一直缓存着,占用内存空间

//UIImage *image = [UIImage imageNamed:@"flake.png"];

//bundle 捆,束。bundle 代表我们的工程    路径

//通过图片的名字查找项目中文件的路径

//第一个参数:图片的名字。第二个参数:图片的扩展名

UIImageView * imageView = [[UIImageView alloc]initWithFrame:CGRectMake(x,y,w,h)];

NSString *imagePath = [[NSBundle mainBundle] pathForResource:@"flake" ofType:@"png"];

//这种方式创建的图片,不会再内存中缓存,用完之后就被释放掉了。所以如果要加载很大的图片,并且这个图片只是使用一段时间,可以通过这种方式加载。如果通过imageNamed方式加载,即使图片不用了,也会一直缓存在内存中。

//通过指定图片的路径来创建一个UIImage对象

UIImage *image = [[UIImage alloc] initWithContentsOfFile:imagePath];

imageView.image = image;

[self.view addSubview:imageView];

76、void * 代表任意的对象类型,等价于id类型

77、(UIImageview *)强制类型转换,因为头文件是(void *)类型的

UIImageView * imageView = (__bridge UIImageView * )context;

79、// %d 是整数的占位符, %02d 表示整数是两位

// %.02f 代表小数点后两位,默认保留6位小数

——————————————————————————————————————————————————

80、打飞机(触碰飞机移动)

//触碰飞机让飞机移动

-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event

{

//NSSet  类似于数组  touches屏幕中点的集合

UITouch *变量名1 = [touches anyObject];

//locationInView 获取屏幕中我们所触发的那个点

CGPoint 中心点1 = [变量名1 locationInView:self.window];

//CGRectContainsPoint 判断所触发的那个点是否在飞机的内部

if (CGRectContainsPoint(myPlane.frame, 中心点1 ))

{

myPlane.center = 中心点1 ;

}

}

81、会动的火焰(向数组中添加图片对象)

imagesArray = [[NSMutableArray alloc] init];

//数组当中加了17个UIImage对象

for (int i = 1 ; i <= 17; i++)

{

// %d 是整数的占位符, %02d 表示整数是两位

// %.02f 代表小数点后两位,默认保留6位小数

NSString *imageName = [NSString stringWithFormat:@"campFire%02d.gif",i];

UIImage *image = [UIImage imageNamed:imageName];

[imagesArray addObject:image];

}

82、 静态(static)变量,全局变量,const变量区别:

static 静态变量,即不在堆上,也不在栈上,静态变量是系统在编译期就直接给它赋值的,所以当程序执行静态变量所属的方法的时候,也就不会再执行这行代码了。静态变量的赋值只会在编译器执行一次,且不能赋值一个不确定的值。static关键字会在声明变量时分配内存,在程序运行期间只分配一次内存,之后再访问时实际都是在访问原先的内存,适合于不常改变的局部变量。

全局变量也是只分配一次内存,并在整个程序运行期间保持不变。

const    变量是只读的,即第一次初始化后他的值将不能改变,通常用来声明常量。

83、宏定义#define

特点:全大写,单词之间用下划线

好处:把无意义的数字用字符串代替,修改一个地方即可修改所有地方;

一个良好的编程习惯是定义宏定义的时候,最外面加上括号

84、让定时器失效

[定时器名  invalidate] ;

85、参数传递    context:上下文

[UIView beginAnimations:nil context:(__bridge void *)(imageview2)];

[UIView setAnimationDidStopSelector:@selector(animationDidStop:finished:context:)];

-(void)animationDidStop:(NSString *)animationID finished:(NSNumber *)finished context:(void *)context

{

//    (UIImageview *)强制类型转换,因为头部是(void * )context 类型的

UIImageView * imageView = (__bridge UIImageView * )context;

[imageView removeFromSuperview];

}

86、图片名称写的不正确的情况下,系统会提示错误,或者加载不出来图片,所以名称不好写的话,最好复制粘贴,图片的格式名也要写正确。

NSString * 字符串名 =[NSString stringWithFormat:@“图片名 %d”,i ] ;(拼接类型转换)

87、在OC里,所有处理角度的值都用的是弧度。

旋转的时候,负数是逆时针,正数是顺时针。

——————————————————————————————————————————————————

89、打地鼠

//让锤子旋转

//设置旋转时   旋转中心默认的是 中心点

//锚点 anchorPoint是相对于bounds的比例值来确定的  (0,0)左上角  (1,1)右下角

//锚点 anchorPoint  锚点设置为(0,0)的时候是以左上角为中心旋转的,锚点设置为(1,1) 是以右下角为中心旋转

IOS使用左手坐标系,坐标原点在左上角,MacOS使用右手坐标系,原点在左下角

//如果设置了transform 属性,必须恢复transform属性

//identity  特性

//CGAffineTransformIdentity 取消自身的所有变换

hammerV.transform=CGAffineTransformIdentity;

[UIView beginAnimations:nil context:nil ];

[UIView setAnimationDuration:0.5];

//旋转Affine  仿射     Rotation  旋转角度

//在oc 里   所有处理角度的值都用的是弧度angle*M_PI /180

//如果角度是整数   顺时针旋转  , 角度是负数    逆时针旋转

hammerV.transform=CGAffineTransformMakeRotation(-90/180.0*M_PI);

[UIView commitAnimations];

90、延时方法

[self performSelector:@selector(方法名) withObject:对象 afterDelay:延时时间];

91、直接跳出整个方法(猜数字游戏)   return ;

92、 //UserInteractionEnabled  设置是否可交互;

文本框名.UserInteractionEnabled =NO;

93、图片移至最下层

[self.window sentSubviewToBack:图片名 ] ;

94、    [文本框名 resignFirstResponder]; 让键盘下落

95、hidden 隐藏属性,逻辑类型

96、这个方法不符合要求(了解即可)

//让对象放大1.1~2倍的算法    1.0/(arc4random()%10+1)+1;

97、让雪花消失

-(void)remove

{

不能把雪花对象设置成全局变量  这样会导致找到的雪花对象不知道是哪个对象,而且会引起内存泄露;

[imageView removeFromSuperview];

}

——————————————————————————————————————————————

98、#import 关键字 (在文件中导入工具,以便以后能够使用)

<> (尖括号代表的是系统的工具,即SDK中已有的。如果系统的工具满足不了要求,需要我们自己创建的工具在引用的时候使用“”(双引号),不再使用尖括号)

Foundation代表 Xcode左侧 Frameworks—》foundation.framework,即框架

“/”代表子文件夹

Foundation.h 中同时导入了Foundation.framework中其他所有的工具类,可以只导入Foundation.h即可实现将所有类 都导入使用。

@interface 作用:用来定义(声明)类

@interface (类名1): ( 类名1的父类 ) “ : ”是 继承的意思

99、//看似我用了一个指针来调取了一个方法,其实它在运行的时候,通过这个指针来找到我指向的对象,然后用对象来调方法。

102、 //隐藏信号栏

// [UIApplication sharedApplication].statusBarHidden = YES;

103、定时器的参数传递 (传递的是一个对象,容易被绕晕) ???

[NSTimer scheduledTimerWithTimeInterval:2 target:self selector:@selector(go:) userInfo:diji repeats:YES];

-(void)go:(NSTimer  * )time

{       //注意这个是 “NSTimer * ”

UIImageView* diji = (UIImageView* )time.userInfo;

105、在iOS模拟器上添加项目图标

在 .plist 添加一个添加一行 icon files,后面value 命名为 你要设置的图片名称加后缀,即可。

106、ARC(automatic reference  count) 内存半自动管理机制

—————————————————————————————————————————

107、super代表父类  对象,是一个对象,不是类

108、self.age = 18  与 age =18 的结果是一样的,只是第一种是先调用set方法,对age赋值,第二种是直接对属性赋值。

109、[  self  减号方法  ] self 在减号方法中使用,self 代表当前对象

[  self  加号方法  ] self 在加号方法中使用,self 代表当前类

111、栈 (stack) 、堆(heap) ,变量一般放在这两个里面,但静态变量比较特殊,不在这两者里面,在全局数据区。

—————————————————————————————————————

112、用双重循环创建九宫格,按钮tag 设置:btn.tag = i * 3 + j ;

用单循环创建九宫格,按钮 tag 设置 : btn.tag = i+1 ;

113、图片名.userInteractionEnable=YES;

114、控件.transform = CGAffineTransformMakeRotation(角度/180*M_PI);

116、导航控制器(标记红色的为可能更改的地方)

//创建导航控制器

UINavigationController  * 导航控制器名 = [[ UINavigationController  alloc] initWithRootViewController :viewController ];(viewController 是类名)

self.window.rootViewController = 导航控制器名; //这句话有点不太理解???

//导航条隐藏

导航控制器名.navigationBarHidden = YES ;

//设置视图控制器的标题,会自动居中显示在导航条上

self.viewController.title = @“标题”;

//跳转到某个新建的导航页

viewController * 新建类变量名称 = [[ viewController  alloc ] init]; (viewController  是类名)

[ self.navigationController  pushViewController : 新建类变量名称  animated : YES /NO ];

//跳回到根视图控制器

[ self.navigationController popToRootViewControllerAniamted:(BOOL) ];

// pop 到指定控制器

[ self.navigationController popToViewController : (UIViewController) animated: (BOOL)];

//self.navigationController.viewControllers可以返回当前导航控制器中的控制器们

//  哪来的回哪去

[self.navigationController popViewControllerAnimated:(BOOL)];

//导航控制器间的传值

NSArray * 数组名 = self.navigationController.viewControllers ;

取出控制器的索引值 [ 数组名  objectAtIndex : 索引值 ] ;

//在导航控制器的两边创建按钮

UIBarButtonItem  * 左边按钮 = [[  UIBarButtonItem  alloc] initWithTitle : @“左边按钮名”style:UIBarButtonItemStylePlain   target : self     action : @selector (左边按钮方法) ];

self.navigationItem.leftBarButtonItem = 左边按钮 ;

// navigationItem :导航项    leftBarButtonItem : 左栏按钮项

UIBarButtonItem * 右边按钮 = [[  UIBarButtonItem alloc] initWithTitle : @“右边按钮名”style: UIBarButtonItemStylePlain   target: self      action :@selector(右边按钮方法) ];

self.navigatioItem.rightBarButtonItem = 右边按钮 ;

//直接跳转到根视图控制器

[self.navigationController   popToRootViewControllerAnimated:<#(BOOL)#>] ;

→定义导航栏上左右按钮的几种形式(以右边按钮为例)

1??系统自带的样式

// Custom 意思是自定义、、定义按钮为系统图表

UIButton * 按钮名 = [ UIButton  buttonTypeWithType : UIButtonTypeInfoLight ] ;

UIBarButtonItem * 右按钮名 = [[ UIBarButtonItem alloc]  initWithCustomView : 按钮名 ] ;

self.navigationItem.rightBarButtonItem =  右按钮名 ;

2??用image定义按钮的形式

//定义按钮为图片

UIBarButtonItem * 右按钮名 = [[  UIBarButtonItem alloc ] initWithImage:[UIImage  imageNamed:@“图片名”] style : 1     target :self  action:@selector (方法名) ];

self.navigationItem.rightBarButtonItem = 右按钮名 ;

3??用选项卡代替按钮

NSArray * 数组名 =[[  NSArray  alloc ] initWithObjects :[UIImage   imageNamed:@“图片名1”],[UIImage  imageNamed:@“图片名2”],nil ];

UISegmentedControl * 名称 2= [[  UISegmentedControl  alloc]initWithItems :数组名 ];

名称2.segmentedControlStyle = UISegmentedControlStyleBar ;

//设置选项卡按钮能弹起 ???

名称2.momentary =YES ;

UIBarButtonItem  *  右按钮名 =[[  UIBarButtonItem  alloc] initWithCustomView : 名称2 ];

self.navigationItem.rightBarButtonItem = 右按钮名 ;

117、滚动条(UIScrollView)

UIScrollView *  滚动条名 = [ [ UIScrollView  alloc] init ];

滚动条名.delegate  = self ;

滚动条名.center = CGPointMake(x,y);

滚动条名.bounds = CGRectMake ( 0,0,width,height ) ;

滚动条名.contentSize  = CGSizeMake (图片尺寸 * 图片数 , height ) ;

//分页

滚动条名.pagingEnabled = YES/NO ;

//设置滚动条下面的指示器条是否可视

滚动条名.showsHorizontalScrollIndicator = YES/NO ;

[ self.view  addSubview:滚动条名 ];

—————————————————————————————————

118、记得在.h里面声明类之后要在  .m里写类的实现

119、图片名或标签名.userInteractionEnable=YES;   设置可交互性--视图的层级关系--响应链

——》设置可交互性,控件只有图片和标签没有交互性,所以在上添加的按钮不能被按下,除非交互性被设置为YES。

(若视图不可交互,则子视图一定不可交互;若父视图可交互,则子视图的交互性由子视图决定)

120、  #pragma mark ——   做标记,用于区分各个方法

121、导航控制器—》用到栈zhan结构:导航控制器只显示最上面的一个元素

导航栏只有一个,所有视图控制器公用。

122、代理的本质还是传值

125、  将多余的地方减掉

图片框.clipsToBounds = YES ;

图片框.layer.cornerRadius = 20 ;  设置圆角

————————————————————————————————————————————————

127、   ??????

/*模拟导航控制器是如何处理穿进去的视图控制器的

UINavigationController.m

- (id)initWithRootViewController:(UIViewController *)rootViewController

{

if (self = [super init])

{

//导航控制器内部首先把传进来的rootViewController存到栈中。

rootViewController.navigationController = self;

}

return self;

}

*/

———————————————————————————

//创建一个导航控制器,并且把第一个视图控制器当做导航控制器的根视图控制器

//UINavigationController 是一个容器viewcontroller(继承自UIViewController),因为他可以管理其他的多个viewcontroller。

UINavigationController *navViewController = [[UINavigationController alloc] initWithRootViewController:firstViewController];

//把导航控制器放在window上(这个地方可能会有改动,不一定是self.window )

self.window.rootViewController = navViewController;

//push 推,压 ,第一个参数:要压栈的viewcontroller,第二个参数:是否要动画

//self 代表的是当前的viewcontroller

//self.navigationController  代表的是当前viewcontroller所在的导航控制器

[self.navigationController pushViewController:secondViewController animated:YES];

—————————————————————————————————————————————————

//设置导航的标题

self.navigationItem.title = @"aaa";

if (_rightCount == 4)

{

ZYMainViewController *main = [[ZYMainViewController alloc] init];

//因为在main中需要push       所以在这里将导航加载这里    将main初始化为导航的根控制器

UINavigationController *mainNav = [[UINavigationController alloc] initWithRootViewController:main];

mainNav.navigationBarHidden = YES;

//找根控制器

ZYAppDelegate *appDelegate = [[UIApplication sharedApplication] delegate]];

[UIView beginAnimations:nil context:nil];

[UIView setAnimationDuration:kAnimationDuration];

[UIView setAnimationTransition:UIViewAnimationTransitionCurlUp forView:appDelegate.window cache:YES];

[UIView commitAnimations];

appDelegate.window.rootViewController = mainNav;

}

————————————————————————————————————————————————

//Appear 出现 Will 将

//重写父类的方法。

//当控制器将要显示到屏幕上的会调用这个方法,而且会多次调用

- (void)viewWillAppear:(BOOL)animated

—————————————————————————————————————————————————

/*

返回按钮的优先级,优先级从高到低

1.手动设置self.navigationItem.leftBarButtonItem

2.使用第一个界面的标题

3.如果第一个界面没有标题,默认为back

*/

—————————————————————————————————————————————

//导航条是多个viewcontroller共有的

//导航项是每个viewcontroller都有的属性

—————————————————————————————————————————————

//创建一个UIBarButtonItem

//    UIBarButtonItem *barButton = [[UIBarButtonItem alloc] initWithTitle:@"返回" style:UIBarButtonItemStylePlain target:self action:@selector(goBack:)];

//

//    //navigationItem 导航项(左按钮,右按钮,标题),设置导航条的左按钮

//    self.navigationItem.leftBarButtonItem = barButton;

————————————————————————————————————————————

//另外一种创建UIBarButtonItem的方式

//Custom 自定义视图

// UIBarButtonItem *barButton = [[UIBarButtonItem alloc] initWithCustomView:<#(UIView *)#>]

//navigationBar是继承自uiview的,所以可以直接通过addsubview的方式添加,但是因为navigationBar是共有的,所以添加上的视图是所有界面都能看到的

//    UIView *aView = [[UIView alloc] initWithFrame:CGRectMake(220, 0, 100, 44)];

//    aView.backgroundColor = [UIColor redColor];

//    [self.navigationController.navigationBar addSubview:aView];

//    self.navigationItem.leftBarButtonItem.title = @"1233";

————————————————————————————————————————————

//self.navigationController 通过导航控制器,调用viewControllers方法,这个方法的作用是返回导航控制器中所有的视图控制器

NSArray *allViewController = [self.navigationController viewControllers];

//找到第一个视图控制器的对象

ZYFirstViewController *firstController = [allViewController objectAtIndex:0];

//pop 弹出 ,出来

[self.navigationController popViewControllerAnimated:YES];

128、  UIViewController * viewController = [[[UIViewController alloc]initWithNibName:@"ViewController" bundle:nil] autorelease];

//  懒加载  lazy load (只创建视图控制器对象,运行程序是不能显示view,但是执行下面代码,才会调用vc的viewDidLoad方法。)

self.window.rootViewController = viewController;

129、不能深度赋值

CGRect rect = imgView.frame;

rect.origin.y += 3;

imgView.frame = rect;

130、userInfo:用户信息   target:目标  给哪个对象来设置

131、CGRect (待测试????)

CGRectMake(X,Y,W,H)用代码定义矩形

NSStringFromCGRect(someCGRect);把CGRect结构转变为格式化字符串

CGRectFromString(aString);由字符串表示恢复出矩形

CGRectInset(aRect);用来创建较小或较大的矩形(中心点相同),使用正的内嵌值表示较小的矩形,负的表示较大的矩形

CGRectIntersectsRect(rect1,rect2);判断矩形结构是否交叉,两个对象是否重叠

CGRectZero;高、宽为0,位于(0,0);需要创建边框但还不确定边框大小或位置时可以使用此常量。

132、在非ARC下,下面代码有无警告和错误?并指出错误原因。

Man,Woman是People的子类

People中的有方法: -(void)peopleMethod,

Man类中有方法:   -(void)manMethod

Woman类中有方法: -(void) womanMethod

1 Woman *w = [Man alloc]; 警告  指针类型不匹配

incompatible pointer type…

2 [w womanMethod];运行崩溃 –[Man womanMethod] unrecognized selector sent to instance 0xxxxxx;

3 People *p = [Man alloc]; 正确

4 [p peopleMethod];编译正确,运行正确。

5 Man *m = [People alloc];编译 警告  不匹配的指针类型

6 [m peopleMethod];编译 执行 正确。

7 NSString *p = [Man alloc];编译 警告 不匹配指针类型

8 [p manMethod]; 编译警告,执行正确

133、universal通用的,executable 可执行的

136、UIView  作用:充当管理者

ViewHierarchy 视图层次关系

137、//assign 九大基本数据类型

//copy  字符串

//retain 对象类型(比如数组)

//strong 基本不用,主要是系统的一些对象

138、//  总结:ios8 SDK 之前 lab上是可以添加lab并且能够显示的,但是ios8 SDK 之后 不行了。但是View上却可以添加子视图。

139、  hidden 隐藏 默认为NO

140、创建登陆注册页面,比较好的一种做法是在window 上同时创建两个视图,但是先添加一个登陆页面,在按钮中把注册页面self.view  addSubview,显示出来。

142、关于UIViewController

UIViewController :UIResponder

我们用的都是UIViewController的子类,而且每个viewController都会默认存在一个view。

如果把viewController的对象赋给window的rootViewController,则会显示viewController中的view的内容。

在加载viewController的view时,首先从xib文件中加载,然后才去执行viewController中viewDidLoad方法。

143、viewDidLoad是重写方法(即自定义方法)

144、//把独立的逻辑封装成方法,用self调用,减少入口方法的负担,便于管理

147、高清图@2x

148、  模态弹出

[self presentViewController:shanken animated:YES completion:nil];

[self dismissViewControllerAnimated:YES completion:nil ];

150、最先讲的一种:

SecViewController * VC = [[SecViewController alloc]init];

获得应用程序的对象

UIApplication * app=[UIApplication sharedApplication];

根据应用程序的属性,得到入口类的对象

AppDelegate * appdelegate =app.delegate;

根据入口类的属性,得到当前窗口window

UIWindow * window= appdelegate.window;

[window  addSubview:VC.view];

第一种:(这种方式获得的是keyWindow,当出现键盘、警示框等的话,主window就会不是入口类的window)

UIWindow*window=[UIApplication sharedApplication].keyWindow;

第二种:噢合度 (用这种创建方式最安全)

UIWindow * window=[[UIApplication sharedApplication]delegate]window];

第三种:

UIApplication * App=[UIApplication sharedApplication];

NSArray * array=App.windows;

UIWindow * window=[array objectAtIndex:0];

151、键盘是系统用window做的

152、注意动画的 setAnimationTransition:UIViewAnimationTransitionCurlUp ,这个是有视图限制的,不能放在入口方法中,因为入口方法只有一个视图,不能够翻转,但是加载延时方法之后,就可以实现翻转。

——————————————————————————————————————————————

154、 ????这个到底啥意思???

用single view application 创建的项目,里面默认是没有创建window 的,在第二个页面里添加一个文本框,和一个方法(touchbegin),文本框出来的时候点击空白地方,键盘不会下去????

—》解决办法:第二个页面默认是创建了view 的,但是没有在view中创建实体对象,也就是说点击空白地方就真的是空白,连背景都没有,看着是白色的,其实什么也没有,。。如果设置了背景颜色,再点击空白处键盘就可以下去了。

155、[self presentViewController:second animated:YES completion:nil];

这句话只是让second页面从下面出来,这句话只能放在相应的触发事件里面,如果在ViewDidLoad里,那么second页面是被加载了的,但是跳转不过去?!不知道为什么会加载second里的内容。

156、UIViewController 是视图控制器,UIView是视图,和有没有window没有任何关系。

157、init方法与类方法本质上是没有区别的,类方法里面有 autoRelease 方法,init方法alloc 需要调用release 方法。

158、   ????

NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(autoScroll) userInfo:nil repeats:YES];

////通常在主线程中使用nstimer 出现滑动界面时,系统为了更好的处理UI时间和滚动显示 主线程run loop会暂时停止处理一些其他事件,这时主线程中运行的NSTimer会被暂停 。解决办法就是改变ranloop运行的mode  mode可以看成事件类型  不使用默认的  而是使用NSRunLoopCommonModes [[NSRunLoop currentRunLoop] addTimer:timer forMode:NSRunLoopCommonModes]默认类型即缺省类型为NSDefaultRunLoopMode

[[NSRunLoop currentRunLoop] addTimer:timer forMode:NSRunLoopCommonModes];

159、内存管理黄金法则:

The basic rule to apply is everything that increases the reference counter with alloc,[mutable]copy[WithZone:] or retain is in charge of the corresponding [auto]release.

如果一个对象使用了alloc,[mutable] copy,retain,那么你必须使用相应的release或autonrelease.

基本类型和C语言的类型:如:int,short,char,struct,enum,union等类型

OC类型:任何继承于NSObject对象都属于OC的类型。

我们讲的内存管理实际上是对OC类型的内存管理,它对基本数据类型和C语言的类型并不管用。

每一个OC对象都有一个4个字节的retainCount的计数器。表示当前对象被引用的计数。如果计数为0,那么就真正的去释放这个对象。

规则:

1、Objective-C类中实现了引用计数器,对象知道自己当前被引用的次数

2、最初对象的计数器为1

3、如果需要引用对象,可以给对象发送一个retain消息,这样对象的计数器就加1

4、当不需要引用对象了,可以给对象发送release消息,这样对象计数器就减1

5、当计数器减到0,自动调用对象的dealloc函数,对象就会释放内存

6、计数器为0的对象不能再使用release和其他方法

160、设计模型:MVC (model view controller)  ??

162、    // 判断字符串中是否包含另一个

NSRange range = [@"abcd" rangeOfString:@"ab"];

if (range.location != NSNotFound)

{

NSLog(@"————————%@",NSStringFromRange(range));

}

163、    // 设置标题

[btn setTitle:@"按钮" forState:UIControlStateNormal];

//获得按钮的标题

NSString *title = [btn titleForState:UIControlStateNormal];

NSLog(@"%@--——————%@",title,btn.titleLabel.text);

164、    // 取消目标self上所有要调用的方法,这个是NSObject的方法

[NSObject cancelPreviousPerformRequestsWithTarget:self];

165、数组里面存的是指针,指针类型占用 4 个字节

166、关联方法   IBAction    ,  关联控件   IBOutlet    ,   IB—》Interface Builder 界面建设者

167、NSStringFromCGSize(<#CGSize size#>) 方法

CGRectGetHeight(frame)  、NSStringFromCGRect()

168、选项卡的selectedSegmentIndex 属性

170、//  思考:ios 下 支持哪些格式的图片?

//    jpg png gif...

171、Xcode中的自定义代码片段默认放在~/Library/Developer/Xcode/UserData/CodeSnippets文件夹下

173、动画结束的头文件,animaitonID,context

174、 NSString *str2 = @"123";

NSString *str3 = @"123";

这种方式创建的这两个字符串是拥有共同的内存地址的

NSString *str = [NSString stringWithFormat:@"laosun"];

NSString *str1 = [NSString stringWithFormat:@"laosun”];

这种方式创建的这两个字符串不是同一个内存地址,所以这才是真正的创建字符串的方式

字符串之间的比较不是用“==”,而是用“isEqualToString:(NSString *)”

%p 是 输出内存地址

175、//  字符串类型不能强制类型转换成基本数据类型,要通过相应的方法 [字符串名  intValue]

%% 代表是一个百分号

176、//在.h中声明要实现的协议的协议名,防止警告。

@interface ZYAppDelegate : UIResponder <UIApplicationDelegate,UIActionSheetDelegate,UIAlertViewDelegate>

//  点击ok按钮 调用某个方法(协议方法)

//  1 协议方法一般都在对应的类声明的头文件中,找到通过操作能够自动被调用的协议方法。

//  2 将此方法复制,粘贴到弹出alertview的类中,加以实现。

//  3 方法是自动执行,但是必要有个前提,必须设置delegate为self

177、- (BOOL)respondsToSelector:(SEL)aSelector;

179、代理—协议

//两个类的头文件相互的导入,会引起 交叉导入 的错误。

//#import "ZYNextViewController.h"

//交叉导入 的错误的解决方案:

//@class + 类名

@class ZYNextViewController;

@interface ZYViewController : UIViewController

在.m中还需要写:   #import "ZYNextViewController.h”

//协议的定义是独立的。

//通常协议名 的组成  类名+Delegate

@protocol ZYNextViewControllerDelegate <NSObject>

//类比 alertView的协议方法,来指定自己的协议方法,但是我非常清楚,传递不同的值,就会改变不同的背景颜色。

- (void)nextViewController:(ZYNextViewController *)aVC changeBgColor:(int)clickedBtnIndex;

@end

//  [代理  协议方法];

//  当delegate接收到不同的对象时,则就直接用此对象调用协议方法。

//  下面的代码能否顺利执行,必须明确

//   1 _delegate 有没有货

//   2 协议方法是否在相应的类实现

//  判断_delegate能否响应协议方法

/ / - (BOOL)respondsToSelector:(SEL)aSelector;

if ([_delegate respondsToSelector:@selector(nextViewController:changeBgColor:)])

{

[_delegate nextViewController:self changeBgColor:btn.tag];

}

180、//非ARC

//retain  保留 类类型

//copy    复制 类类型 NSString copy

//assign  赋值 基本数据类型

//ARC

//strong  ====== retain/copy

//weak    ====== assign

//readonly 只读  getter = isXX 当获得属性值是可以 对象.属性名 获得,或者 对象.isXX

//readwrite 读写

182、不知道有没有发现,用single View Application 创建的入口类名称不能改,只能是AppDelegate,而用Empty Application创建的入口类名称却是可以更改的。

#import <UIKit/UIKit.h>

入口类的.h 文件                  <UIApplicationDelegate> 实现协议

@interface AppDelegate : UIResponder <UIApplicationDelegate>

@property (strong, nonatomic) UIWindow *window;

@end

类AppDelegate 是UIResponder 的子类,.m中用到了协议 UIApplicationDelegate,方法头是一个协议方法

———————————————————————————————————————————

184、//  NibName nib文件 xib文件

//  bundle  束  打包文件

//  init 会自动加载与类名同名的xib文件,如果xib文件被修改,则必须使用initWithNibName:bundle:加载修改过的xib文件的名字。

185、//  导航条默认的高度是44

//  状态栏(信号区)默认的高度是20

189、代理、协议  实现4步骤

1??、@protocol  类名+Delegate<NSObject>

@optional

协议方法—(void).....

@end

2??、 在类中声明属性 @property(nonatomic,assign)id<类名+Delegate>delegate

3??、在类.m按钮方法中写:

if([self.delegate  respondsToSelector:@selector(协议方法头)])

{

[self.delegate  clickBtn:协议方法的要传递的参数];

}

4??、在哪里实现时,就再哪里新建对象,并把对象自己交给它的delegate

对象.delegate = self

190、

类型:

1 基本类型

2 类类型

3 id

4 结构体  frame

5 枚举 NSTextAlignment

191、

调试程序:

1 设备      真机测试

2 模拟器  局限性 打电话 发短信  加速计 陀螺仪

retina  视网膜   高清屏

192、

[UIView setAnimationTransition:UIViewAnimationTransitionCurlDown forView:self.window cache:YES];

NO.1 enum 转换方式 翻转、卷曲

NO.2 forView:  对哪个视图   如果实现的是视图间的切换,例如从aView—>bView,那么此参数需要填写的aView和bView的父视图。

194

UIWindow *window = [[UIApplication sharedApplication] keyWindow];

[UIView beginAnimations:nil context:nil];

[UIView setAnimationDuration:1];

[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft forView:window cache:YES];

[UIView commitAnimations];

//  上面代码是以动画的形式执行翻转,如果下面代码写在动画执行的逻辑中,则所有的vc的view的显示和子视图的创建过程都是以动画的形式呈现的,这样就会造成界面的错乱。

window.rootViewController = vc;

195

//  self.view 先开始是来源于xib中view,如果xib中的view是4inch,则此代码中获得是4inch对应的尺寸。所以无论使用的是3.5inch还是4inch的simulator,都是依据xib中view的尺寸。总之,要建立这样一种思维:使用之前,先验证数据的正确性。

———————————————————————————————————————————————

时间: 2024-11-09 02:22:20

iOS开发基础----OC/UI控件的相关文章

【IOS 开发】基本 UI 控件详解 (UIDatePicker | UIPickerView | UIStepper | UIWebView | UIToolBar )

转载注明出处 : http://blog.csdn.net/shulianghan/article/details/50348982 一. 日期选择器 (UIDatePicker) UIDatePicker 属性截图 : 1. UIDatePicker 控件属性 (1) Mode 属性 Mode 属性 : 用于设置 UIDatePicker 模式; -- Date 属性值 : 显示日期, 不显示时间; -- Time 属性值 : 显示时间, 不显示日期; -- Date and Time 属性值

ios开发中的UI控件

textview控件 self.textView = [[[UITextView alloc] initWithFrame:self.view.frame] autorelease]; //初始化大小并自动释放 self.textView.textColor = [UIColor blackColor];//设置textview里面的字体颜色 self.textView.font = [UIFont fontWithName:@"Arial" size:18.0];//设置字体名字和字

iOS开发不借助第三方控件实现侧边栏效果

最近在研究iOS程序的侧边栏,因为发现渐渐的iOS的程序也开始走侧边栏的风格了,QQ,今日头条,Path(Path算最早出现侧边栏的app了,所以也把侧边栏效果说成是Path效果),所以就研究了下. 然后发现Git Hub上有很多侧边栏的控件,这些控件效果也都挺玄的,但是我想找到不用第三方控件自己实现侧边栏呢?后来参照这篇blog,然后自己搞了下,算搞清楚了.下面详细介绍一下吧. 1. 首先我们需要在storyboard里面新建3个view controlle,这里也可以是navigation

IOS开发学习笔记018-UIButton 控件

1.移动 2.动画 3.缩放 3.旋转 4.简化代码 5.总结 UIButton 的两种状态 normal highlighted  1.移动 OC语法规定:不允许直接修改某个对象中结构体属性的成员. 1 // 获取image控件的frame 2 CGRect rect = self.btnImage.frame; 3 //self.btnImage.frame.origin.y = 20; // 不能直接修改 4 // 更改Y的值,减小,如果减小到5则一直位5 5 rect.origin.y

Android Studio开发基础之AutoCompleteTextView控件的使用

在输入框中输入我们想要输入的信息就会出现其他与其相关的提示信息,这种效果在Android中是用AutoCompleteTextView实现的.AutoCompleteTextView控件继承自TextView控件,也有其特有的属性: AutoCompleteTextView常用属性 android:completionHint 设置出现在下拉菜单中的提示标题 android:completionThreshold 设置用户至少输入多少个字符才会显示提示 android:dropDownHoriz

【iOS开发】添加子控件方式(懒加载,GCC)

1 // 2 // ViewController.m 3 // GCC 4 // 5 // Created by admin on 15/10/7. 6 // Copyright © 2015年 admin. All rights reserved. 7 // 8 9 #import "ViewController.h" 10 11 @interface ViewController () 12 13 @property (nonatomic, strong) UIButton* bt

Android基础——基本UI控件:

两种文本框:EditText,TextView, 两种按钮:Button,ImageButton, 单选按钮/单选按钮组:RadioButton,RadioGroup 复选框:CheckBox <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:a

IOS开发基础常用控件简介

在IOS开发中,各类控件完美的解决了开发过程中界面与交互展现的问题,使得IOS产品界面更加灵活实用,IOS常用控件的介绍如下. 1.窗口 UIWindow iPhone的规则是一个窗口,多个视图,窗口是你在app显示出来你看到的最底层,他是固定不变的,基本上可以不怎么理会,但要知道每层是怎样的架构. 2.视图 UIView, 是用户构建界面的基础,所有的控件都是在这个页面上画出来的,你可以把它当成是一个画布,你可以通过UIView增加控件,并利用控件和用户进行交互和传递数据. 窗口和视图是最基本

【免费直播课】AppCan基础课程之第五讲 UI控件

小伙伴们, 前几期的课程很赞吧,第五期我们将讲解 UI控件的知识,请大家锁定时间,收看我们的节目~[界面布局之栅格系统] 报名地址:http://ke.qq.com/cgi-bin/courseDetail?course_id=58107直播时间:3月17日19:00 课程目标:熟悉AppCann已封装的控件及其使用方法.课程特色:案例式教学适用人群:有一定WEB前端基础,初步了解过AppCan开发环境,并且想进入移动互联网行业的所有开发者.优惠方式:免费课程详情:本节课主要对AppCan封装的