最近app忙着测试上线,闲得慌,虽然还有很多思考不周全的地方,但是此刻我在网上找了ios的视频学习了,之前只了解过java,C的一些些基本概念.
不耐烦C基础一点点的学习,直接就看就业班的了,
今天看完了0811-按钮操作,主要做了一个加法计算器和上下左右移动图片的项目,
发现学完Android之后再去学ios确实那种感觉….
也比之前0基础编程的感觉好太多了
而且还可以对比两者的设计,
比如今天看到一个数字软键盘,就联想到Android的数字键盘呼出,(好像我之前都没有关注这些点)
手机终端的开发并不是难事,只是需要很多很多时间去优化用户体验,去打磨自己的app,然而作为一个coder,team work 你不能真真的亲力亲为开发的每一步,我常常心里觉得失落…
笔记:
1,为了方便开发者开发出强大的功能,苹果提供了各种各样的框架
UIkit 创建和管理应用程序的用户界面
QuartzCore 提供动画特效以及通过硬件进行渲染的能力
CoreGraphics 提供2D绘制的基于C的API
CoreLocation 使用GPS和WIFI获取位置信息
MapKit 为应用程序提供内嵌地图的接口
AVFoundation 音频,视频处理
我们首先从UI界面开始
* 主要用到的都是UIButton UILabel UITextField 都是继承自UIView (这里有ios和Android不一样的地方, 每个UIView都是一个容器,;能容纳其他UIView;Android里面也是有View,textView button什么的也是其子类,但是控件是放在布局里的,布局是ViewGroup的子类,VIewGroup是View的子类).
动手后遇到的一些问题
UIVIew和ViewController
改backgroud 透明度
IBAction 和IBoutlet
//关闭键盘
//谁申请,谁释放
//FirstResponder 光标所在的文本框
//resign 辞去
[self.num1 resignFirstResponder];
[self.num2 resignFirstResponder];
//让视图关闭键盘,无论现在谁是第一响应者
[self.view endEditing:YES]
//Yes和NO都可以 参数表示是否强行关闭键盘
endEditing.NO 在多线程的时候可能显示不对应该显示Yes
私有扩展 Xcode 4.6开始,苹果建议不开放的属性和方法定义在私有扩展中,可以保证,.h中只定义对外开放的属性和方法.
IBAction 本质上就是viod,只不过能够允许连线而已.
跳转头文件
cmd + 单击
cmd + ctrl +j
控件共有的属性,每个控件都有自己的位置和尺寸,都有自己的父控件和子控件,所有的子控件都继承自UIView,
frame :位置和尺寸
center :中心点位置
bounds
1.针对虚拟机 ios开发中应用界面在虚拟机中显示不全问题?
在Xcode里打开Storyboard,点右边工具窗口最上方的左起第一个图标,然后在右边工具窗口中找到Interface Builder Document,确保这项里的Use Size Classes处于未选中状态,即可让sotryboard中ViewController的大小恢复到以前的标准屏幕大小。
2.点击UITextField 不显示键盘 simulator -hardware-keyboard -Toggle softwarekeyboard XXX
3.UITextField 显示keyboardType Decimal Pad和number Pad的区别 就是有小数点和没小数点区别
4.如果storyboard的view中没有箭头,查看一下这个地方的设置
案例一:加法计算器
@interface ViewController ()
@property (nonatomic,weak) IBOutlet UITextField *num1;
@property (nonatomic,weak)IBOutlet UITextField *num2;
@property (nonatomic,weak) IBOutlet UILabel *resultLabel;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
-(IBAction) computer{
NSString *num1= self.num1.text;
NSString *num2= self.num2.text;
NSLog(@"%@ ==%@",num1,num2);
int result=num1.intValue+num2.intValue;
self.resultLabel.text=[NSString stringWithFormat:@"%d",result];
//关闭键盘
//谁申请,谁释放
//FirstResponder 光标所在的文本框
//resign 辞去
// [self.num1 resignFirstResponder];
// [self.num2 resignFirstResponder];
//让视图关闭键盘,无论现在谁是第一响应者
[self.view endEditing:YES];
//Yes和NO都可以 参数表示是否强行关闭键盘
}
@end
案例二:作业QQ登陆
Android Text View的hint -对应着 Storyboard 的Placeholder
而且 ios还有clear Button!!!这在andorid 的EditText是要自定义的.
一版
1.枚举解决magicnumber
2.定义宏 每一次都是20
3.代码抽取
#import "ViewController.h"
/*枚举类型本质上就是整数,定义的时候,如果只制定了第一个数值,后续的数值会依次递增 枚举类型是解决魔法数字比较常用的手段 */
typedef enum{
KMovingDirTop=0,
KMovingDirLeft,
KMovingDirRight,
KMovingDirButton,
}KMovingDir;
#define KMovingDela 20.0f;
@interface ViewController ()
@property (weak, nonatomic) IBOutlet UIButton *imageButton;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
- (IBAction)top {
/*修改位置可以通过frame 在OC中,不允许直接修改”对象“的”结构体属性“的”成员“ 但是允许修改”结构体属性“的”成员“ self.iconButton.frame.origin.y -=20; 直接报错 如果要修改对象的结构体属性。需要三个步骤 */
//1.取出frame
CGRect frame=self.imageButton.frame;
//2.修改结构体的成员
frame.origin.y -=20;
//3.重新为对象的结构体属性赋值
self.imageButton.frame=frame;
}
//下 左 右抽取代码
- (IBAction)move:(UIButton *)sender {
CGRect frame=self.imageButton.frame;
switch (sender.tag) {
case KMovingDirLeft:
frame.origin.x -=KMovingDela;
break;
case KMovingDirRight:
frame.origin.x +=KMovingDela;
break;
case KMovingDirButton:
frame.origin.y +=KMovingDela;
break;
default:
break;
}
self.imageButton.frame=frame;
}
- (IBAction)zoom:(UIButton *)sender {
//非0为真 ZoomIn ZoomOut
CGRect frame=self.imageButton.frame;
if(sender.tag){
NSLog(@"zoomin");
frame.size.height +=KMovingDela;
frame.size.width +=KMovingDela;
}else{
NSLog(@"zoomout");
frame.size.width -=KMovingDela;
frame.size.height -=KMovingDela;
}
self.imageButton.frame=frame;
}
@end
若把frame改成bound也可以放大缩小
区别就是frame是左上角,bounds是中心:
(IBAction)zoom:(UIButton *)sender {
//用01表示真假表示左右旋转
CGRect frame=self.imageButton.bounds;
if(sender.tag){
NSLog(@”zoomin”);
frame.size.height +=KMovingDela;
frame.size.width +=KMovingDela;
}else{
NSLog(@”zoomout”);
frame.size.width -=KMovingDela;
frame.size.height -=KMovingDela;
}
self.imageButton.bounds=frame;
}
tips:
也可以通过center来修改位置
- (IBAction)move:(UIButton *)sender {
CGPoint center=self.imageButton.center;
switch (sender.tag) {
case KMovingDirLeft:
center.y-=30;
break;
case KMovingDirRight:
center.y+=30;
break;
case KMovingDirButton:
center.x-=50;
break;
}
self.imageButton.center=center;
}
Xcode有个bug:复制代码后修改在原来的代码上