本文介绍: UI基础第一天

1.学前须知

1.1  iOS开发需要学习哪些内容?   

      

1.2   谨记一条软件开发定律:万物皆对象!

        一张图片一个UIImageView对象

        一段文字一个UILabel对象

        一只按钮一个UIButton对象 ……

        因此,搭建UI界面过程极其简单 利用创建对象对象显示屏幕比如,如果要显示5个按钮 用UIButton创建5个UIButton对象 将这5个UIButton对象显示到屏幕上

1.3  如何开发功能强大的移动应用

        为了方便开发者开发出强大的功能苹果提供了各种各样的框架

        UIKit创建管理应用程序用户界面

        QuartzCore:提供动画特效以及通过硬件进行渲染的能力

        CoreGraphics:提供2D绘制基于C的API

        CoreLocation使用GPS和WIFI获取位置信息

        MapKit:为应用程序提供内嵌地图接口

        AVFoundation音频视频处理 ……

        在开发过程需要用到一些特殊功能时,可以尝试使用系统自带的框架

1.3.1 UIKit框架

                顾名思义,UIKit框架是跟UI有关系

                诸如前面所述的界面元素(如UIImageView),都是封装在UIKit框架内部

                UIKit框架中提供了丰富多彩的可视化组件元素

(点击)

XCODE10.1需要点上面的按钮打开控件选择界面 

                利用UIKit框架提供的类来创建各种可视化组件对象最后组成复杂而美观的UI界面

                UIKit没学好,相当于iOS白学了        

2.第一个IOS程序

2.0    创建一个IOS工程

 

其他的就跟OC时创建工程是一样的。 

 这里选择模拟器类型

这里选择屏幕大小

2.1    简介

        初学iOS开发研究的程序不要过于复杂应该从最基本的开始

        大房子都是由小砖一块一块堆成的,而大型App是由无数个小程序段组成的

        实现一个简单的“加法计算器”,作为第一个iOS程序

        分析可得,至少需要开发步骤

        1).添加需要的控件搭建UI界面:1个按钮、3个文本标签、2个文本输入框

        2).监听按钮的点击事件

        3).取得2个文本框值,将计算好的最终结果显示到右边文本标签

        **注意:模拟器下无法调出键盘时,使用command + K键调出键盘

       需要掌握内容

2.2    Storyboard文件

左边箭头表明:程序一启动就会显示箭头所指的界面

2.3 常见UI控件

2.3.1        UILabel文本标签

        文本标签的作用是显示一串固定文字

2.3.2   UIButton – 按钮

        按钮的作用是:监听用户点击事件,在用户点击后做出响应  

2.3.3  UITextField文本输入框

        文本输入框可以弹出键盘,让用户输入文本内容

 2.4  viewviewController

 2.4.1 UIView

2.4.2 父控件和子控件

2.4.3  UIViewController

        手机自带的“设置”中有很多的界面,点击对应选项可以跳到下一个界面

 每一个新的界面都是一个新的UIView,在切换过程中,涉及到了:

  1. UIView的创建和销毁
  2. UIView跟用户交互处理UIView内部一行点击
@property(nonatomic,retain) UIView *view;

        UIView与UIViewController的关系 

严格来讲,下图箭头所指的应该是一个UIViewController对象,里面白色的界面仅仅是UIViewController内部的UIView属性

 在storyboard界面,点击双环按钮(Show the Assistant editor)可以打开助理编辑窗口

 加法计算器程序的运行流程

 综合分析,可以得出程序的简单运行流程: 

  1. 读取Main.storyboard文件
  2. 创建的CZViewController对象
  3. 根据storyboard文件描述创建CZViewController的UIView对象
  4. 将UIView对象显示到用户眼前

2.5 监听按钮的点击

2.6 补充问题

2.6.1 IBAction和IBOutlet究竟有什么作用?

        IBAction相当于void,但是能拖线。IBOutlet私有属性可以拖线。

        IBAction和IBOutlet

        IBAction

        返回值角度上看作用相当于void

        只有返回声明IBAction方法,才能跟storyboard中的控件进行连线

        IBOutlet

        只有声明IBOutlet属性,才能跟storyboard中的控件进行连线

        

2.6.2  还有其他拖线方式

  1. 点击控件右键连线
  2. 按住control拖线(从控件到代码、从代码到控件)
  3. 属性与方法代码写好后,打开View Controller Scene,选择View Controller右键将对应的方法拖到控件上。

2.6.4  Storyboard文件中箭头的含义?(这个新版xcode中没找到

        程序的入口.新建一个ViewController后,设置Is Initial View Controller属性来让当前View Controller为默认启动项。

2.6.5    如何更换storyboard文件

        项目 ->  General -> Deployment Info -> 改变Main.storyboard

2.6.6   如何让文本框只能输入数字

        调出数字键盘(Number Pad

2.6.7   如何退出键盘?

开发人员自己代码退出

1.[第一响应者 resignFirstResponder];

2. [self.view endEditting:YES])

2.6.8  Company Identifier和Bundle Identifier的作用

2.6.9  模拟器还有哪些功能?

  1. 查看模拟器的菜单
  2. window 菜单调整大小
  3. 调试 设置位置 硬件 ->
  4. 设备切换模拟器、旋转
  5. 回到主界面、退出某个程序、卸载某个程序

2.7  设置程序启动加载的storyboard

这个设置表明:程序启动时会加载Main.storyboard

2.8 设置UITextField的键盘类型

2.9  常见问题 

        1.拖线后@property代码、事件处理方法被删除了。

                错误信息This class is not key value codingcompliant for the key resultLabel.

        2.引用控件的属性、事件处理方法都写在.m文件的“类扩展”,保证封装性。

3.0 控件的常见属性

程序运行过程中,经常需要去修改更新
UI
控件的显示状态,比如:
文件下载过程中,实时更新下载进度
音乐播放过程中,实时更新播放进度

 

 如何修改控件的状态呢?方法很简单

不难想到,每一个UI控件肯定都有很多属性,比如:

虽然,每一个UI控件都有自己的独特属性,但是有些属性是每个UI控件都具备的,比如每一个UI控件都有自己的位置尺寸、都有自己的父控件、子控件。于是,所有的UI控件最终都继承自UIView,UI控件的公共属性都定义在UIView中,比如:

@property(nonatomic) CGRect frame;

控件所在矩形框在父控件中的位置尺寸(以父控件的左上角为坐标原点)
可以定义控件的位置(origin)和大小(size)

@property(nonatomic) CGRect bounds;

控件所在矩形框的位置和尺寸(以自己左上角为坐标原点,所以bounds的x、y一般为0)
可以定义控件的大小(size)

@property(nonatomic) CGPoint center;

控件中点的位置(以父控件的左上角为坐标原点)
可以定义控件的位置(center)
在UIKit中,坐标系的原点(00)在左上角,x值向右正向延伸,y值向下正向延伸 

- (void)addSubview:(UIView *)view; //添加一个子控件view

加一个子控件view

- (void)removeFromSuperview; //从父控件中移除

从父控件中移除

- (UIView *)viewWithTag:(NSInteger)tag;
//根据一个tag标识找出对应的控件(一般都是子控件)

根据一个tag标识找出对应的控件(一般都是子控件)

4.0 什么是按钮

  • UIKit框架提供了非常多的UI控件,但并不是每一个都很常用,有些控件可能1年内都用不上,有些控件天天用,比如UIButton、UILabel、UIImageView、UITableView等等
  • 现在就先来学习非常重要且比较基础的一个UI控件—UIButton,俗称“按钮”
  • 一般情况下,点击某个控件后,会做出相应反应的都是按钮
  • 按钮的功能比较多,既能显示文字,又能显示图片,还能随时调整内部图片和文字的位置
     

       4.1 接下来通过一个小案例研究按钮的基本使用

        

 

4.1.1        功能分析

  1. 左下角4个方向按钮,控制头像按钮的位置
  2. 右下角分别是放大、缩小按钮,控制头像的尺寸
  3. 头像按钮既有背景图片,又有文字

4.1.2        步骤分析

  1. 搭建UI界面
  2. 监听按钮点击
  3. 修改头像按钮的属性来调整位置和尺寸
     

4.1.3        掌握

4.1.4 基本操作

添加项目用到的图片到Images.xcassets中( 新版XCODE叫Images.xcassets

图是在设置控件的尺寸为35x35 

 

 

 

通过修改控件的
frame
属性就可以修改控件在屏幕上的位置和尺寸
比如点击“向上”按钮,让按钮的
y
值减小即可
- (IBAction)top:(UIButton *)sender {

    CGRect btnFrame = self.headBtn.frame;

    btnFrame.origin.y -= 10;

    self.headBtn.frame = btnFrame;

}

下面代码
错误
的,
OC
语法规定:
不允许直接修改对
象的结构体属性的成员

        self.headBtn.frame.origin.y -= 10;

代码重构

将上、下、左、右四个按钮都绑定到同一个
move
方法上,通过参数的不同判断应该如何移动
通过参数对象的
tag
属性判断当前是哪个按钮点击的。

通过centerbounds实现移动缩放

1
、通过
center
实现上、下、左、右移动。
2
、通过
bounds
实现缩放。

简单总结

frame
:
能修改位置和尺寸。(全能)
center
:
能修改位置
bounds:
能修改尺寸(一般
x

y
都是
0

代码创建按钮

开发过程中,并不是每次都通过
storyboard
拖控件完成
UI
界面,因为
storyboard
上面的界面是“固定死”的,有时候可能会在程序运行过程中动态地添加一些新的控件到界面上
比如
QQ
聊天信息,是有人发出一条信息后才动态显示出来的。因此,需要掌握如何用代码动态地添加控件
实际上,
storyboard
本质就是根据图形界面描述转成相应的代码

 实现简单动画

在iOS开发中,想实现一些小动画是非常容易的

简易动画大致有2种方式

头尾式

[UIView beginAnimations:nil context:nil]; // 开启动画
[UIView setAnimationDuration:1]; // 设置动画执行时间
/** 需要执行动画的代码 **/
[UIView commitAnimations]; // 提交动画

Block

[UIView animateWithDuration:0.5 animations:^{
    /** 需要执行动画的代码 **/
}];

通过以下属性可以修改控件的位置
frame.origin
center

通过以下属性可以修改控件的尺寸
frame.size
bounds.size

利用transform属性可以修改控件的位移(位置)、缩放、旋转

创建一个transform属性

CGAffineTransform CGAffineTransformMakeTranslation(CGFloat tx,  CGFloat ty) ;
CGAffineTransform CGAffineTransformMakeScale(CGFloat sx, CGFloat sy);
CGAffineTransform CGAffineTransformMakeRotation(CGFloat angle)

(注意:angle是弧度制,并不是角度制)

在某个transform的基础上进行叠加

CGAffineTransform CGAffineTransformTranslate(CGAffineTransform t, CGFloat tx, CGFloat ty);
CGAffineTransform CGAffineTransformScale(CGAffineTransform t, CGFloat sx, CGFloat sy);
CGAffineTransform CGAffineTransformRotate(CGAffineTransform t, CGFloat angle);

清空之前设置的transform属性

view.transform = CGAffineTransformIdentity;

一个UIColor代表一种颜色,通过UIColor的类方法,可以获得很多常用的颜色

+ (UIColor *)blackColor;      // 0.0 white 黑色
+ (UIColor *)darkGrayColor;   // 0.333 white 深灰色
+ (UIColor *)lightGrayColor;  // 0.667 white 亮灰色
+ (UIColor *)whiteColor;      // 1.0 white 白色
+ (UIColor *)grayColor;       // 0.5 white 灰色
+ (UIColor *)redColor;        // 1.0, 0.0, 0.0 RGB 红色
+ (UIColor *)greenColor;      // 0.0, 1.0, 0.0 RGB 绿色
+ (UIColor *)blueColor;       // 0.0, 0.0, 1.0 RGB 蓝色
+ (UIColor *)cyanColor;       // 0.0, 1.0, 1.0 RGB 青色
+ (UIColor *)yellowColor;     // 1.0, 1.0, 0.0 RGB 黄色
+ (UIColor *)magentaColor;    // 1.0, 0.0, 1.0 RGB 品红
+ (UIColor *)orangeColor;     // 1.0, 0.5, 0.0 RGB 橙色
+ (UIColor *)purpleColor;     // 0.5, 0.0, 0.5 RGB 紫色
+ (UIColor *)brownColor;      // 0.6, 0.4, 0.2 RGB 棕色
+ (UIColor *)clearColor;      // 0.0 white, 0.0 alpha 清除颜色(空色)

一个UIImage对象代表一张图片,一般通过imageNamed:方法就可以通过文件名加载项目中的图片(PNG格式的图片可以省略扩展名)

UIImage *image = [UIImage imageNamed:@"btn_01"];

实际上,UIButton自带了很多种不同的样式

 

在用代码创建按钮的同时指定按钮样式
UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom]; 
UIButtonTypeCustom:无类型,按钮的内容需要自定义
UIButtonTypeDetailDisclosure: 
UIButtonTypeInfoLight: 
UIButtonTypeInfoDark: 
UIButtonTypeContactAdd: 

5.0 加法计算器源代码

//
//  ViewController.m
//

#import "ViewController.h"
// 类扩展
@interface ViewController ()

- (IBAction)computer;
@property (weak, nonatomic) IBOutlet UITextField *txtNum1;
@property (weak, nonatomic) IBOutlet UITextField *txtNum2;
@property (weak, nonatomic) IBOutlet UILabel *lblResult;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
}


- (IBAction)computer {

    //1.获取用户的输入
    NSString * n1 = self.txtNum1.text;
    NSString * n2 = self.txtNum2.text;
    //2.计算和求和
    long int result = n1.longLongValue + n2.longLongValue;
    //3.把结果显示到结果Label上
    self.lblResult.text = [NSString stringWithFormat:@"%ld",result];
    
    //4.把键盘叫回。
    // 方式1.谁是第一响应者,就让谁辞职。。
    //- (BOOL)resignFirstResponder;
    [self.txtNum2 resignFirstResponder];
    [self.txtNum1 resignFirstResponder];
    
    // 方式2.
    //self.view 就表示当前控制器管理的那个view(每一个控制器都会管理一个view)
    //这时把键盘叫回去的思路就是:让控制器管理view停止编辑,这样的话,凡是这个view中的子控件叫出来的键盘都回去了。
    //- (BOOL)endEditing:(BOOL)force;    // use to make the view or any subview that is the first responder resign (optionally force)
    [self.view endEditing: YES];
    
    
}
@end

原文地址:https://blog.csdn.net/panjiye82/article/details/124993279

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_25432.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注