IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> iOS开发之UI开发1(UIView、UIButton、动画) -> 正文阅读

[移动开发]iOS开发之UI开发1(UIView、UIButton、动画)

框架

方便开发者开发出强大的功能,apple提供了各种各样的框架

  • UIKit:创建和管理应用程序的用户界面
  • QuartzCore:提供动画特效以及通过硬件进行渲染的能力
  • CoreGrephics:提供2D绘制的基于C的API
  • CoreLocation:使用GPS和WIFI获取位置信息
  • MapKit:为应用程序提供内嵌地图的接口
  • AVFoundation:音频、视频处理

类前缀

选中项目,右边有ClassPerfix即为类前缀,以后创建的类都会加上前缀

UIKit坐标系

UIKit中,原点(0,0)在左上角

IBAction与IBOutlet

IBAction全称“Interface Builder Action”,“界面构建动作”,其实是动作监听,如按下,抬起,长按,从返回值相当于void
IBOutlet全称“Interface Builder Outlet”,翻译过来就是“界面构建输出口”,“插座变量”
只有声明是 IBAction与IBOutlet才能跟storyboard进行连线

Text把键盘叫回

  • 谁叫出的键盘谁叫回
//方法一
[self.对象 resignFirstResponder];
  • 每个控制器都会管理一个view,view代表当前控制的,让其停止编辑
//方法二
[self.view endEditing:YES];

UIView

UIView与UIViewController

  • UIView负责数据的展示、采集用户输入、监听用户事件
  • UIViewController处理每个UIView的创建、销毁、触发事件后的事件处理

UIView绑定

点击辅助控制器,按住shift点击view,拉到controller.m文件里面,自动生成代码

UIView的常见方法

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

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

//根据tag识别对应的控件(一般是子控件)
-(UIView *)viewWithTag:(NSInteger)tag;

子控件和父控件

//控件下所有子控件
self.view.subviews
//控件的父控件
self.view.superviews

控件的frame,center,bounds

frame包括控件的大小和坐标

CGRect originFrame = self.控件.frame;
originFrame.origin.y = 10;
//赋值回去
 self.控件.frame = originFrame;
  • center只能修改位置
CGRect originBounds = self.btnIcon.bounds;
originBounds.size.width += 10;
originBounds.size.height += 10;
self.btnIcon.bounds = originBounds;
  • bounds只能修改大小

多个控件由一个方法控制

  • 修改控件属性tag
switch(sender.tag){
 case 10:
 //
 break;
 case 20;
 //
 break;
}
  • 根据tag获取控件:父控件可以根据tag找到子控件
UITextField *txt = [self.view viewWithTag:1000];
txt.text = @"txt";

动态添加控件

  • viewDidLoad方法中写,控制器加载完view后执行的代码
UIButton *button  =  [[UIButton alloc] init];
//设置默认状态下显示的文字
[button setTitle:@"button1" forState:UIControlStateNormall];

//加载图片
UIImage *imgNormal = [UIImage imageNamed:@"testPictuce"];
//设置默认状态背景图片
[button setBackgroundImage:imgNormal forState:UIControlStateNormal];
//设置按钮frame
button.frame = CGRectMake(50,100,100,100);
//注册事件
[button addTarget:self action:@selector(buttonClick) forControlEvents:UIControlEventTouchUpInside];

//添加进view
[self.view addSubview:button];

UIButton

  • normal(普通状态)
    默认情况Default
    对应的枚举常量:UIControlStateNormal
  • highlighted(高亮状态)
    按钮按下未松开
    对应的枚举常量:UIControlStateHighlighted
  • disabled(失败状态,不可用状态)
    enabled属性为NO,则处于disable状态,代表按钮不可被点击
    对应的枚举常量:UIControlStateDisabled

UIButton和UIImageView的区别

  • UIButton能监听点击事件,UIImageView默认情况不能
  • UIButton可以在不同状态显示不同的图片
  • UIButton既可以显示文字,又能显示图片(能显示两张图片,backgroundImage和Image)

设置按钮的背景图片

  • 设置不同状态下的背景图片
    为了保证高亮状态正常显示,按钮的type设置为custom

transform属性

利用transform属性可以修改控件的位置、缩放、旋转
transform是结构体(不能直接修改)
CGFloat angle是弧度不是角度,360°=2π,180°=π

//创建transform属性:位置、缩放、旋转
CGAffineTransform CGAffineTransformMakeTranslation(CGFloat tx,CGFloat ty);
CGAffineTransform CGAffineTransformMakeScale(CGFloat sx,CGFloat sy);
CGAffineTransform CGAffineTransformMakeRotation(CGFloat 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;
  • 例子
-(IBAction)move){
//直接赋值,平移到基于原点(0,0)平移到-50的位置
self.btnIcon.transform =  CGAffineTransformMakeTranslation(0,-50);
}
-(IBAction)move){
//基于现在的值平移向上50
self.btnIcon.transform =  CGAffineTransformTranslate(self.btnIcon.transform,0,-50);
}

文件路径、plist文件

  • 放置Supporing Files文件夹下
NSString *path = [[NSBundle mainBundle] pathForResource:@"pictuce.plist" ofType:nil];

介绍:[NSBundle mainBundle]获取app安装到手机上的根目录,搜索pathForResource:@"pictuce.plist"文件,ofType:nil是后缀,找到文件路径返回给path
NSArray *array = [NSArray arrayWithContentsOfFile:path];

UIImage

png格式可以省略扩展名

UIImage *imgNormal = [UIImage imageNamed:@"testPictuce"];

动画

//头尾式
//开启一个动画
[UIView beginAnimation:nil context:nil];
//设置动画执行时间
[UIView setAnimationDuration:2];

//=====中间是要执行动画的代码=====
self.btnIcon.center=centerPoint;
//=====中间是要执行动画的代码=====

//执行动画
[UIView commitAnimations];
//Block式
[UIView animateWithDuration:0.5 animations:^{
//执行动画的代码
self.btnIcon.center=centerPoint;
}];

UIImageView帧动画(两种加载方式)

UIImageView帧动画相关的属性和方法

@property(nonatomic,copy)NSArray *animationImages;
需要播放的序列帧图片数组(里面都是UIImage对象,会按顺序显示里面的图片)
@property(nonatomic)NSTimeInterval animationDuration;
帧动画的持续时间
@property(nonatomic)NSInterger animationRepeatCount;
帧动画的执行次数(默认无限循环)
-(void)startAnimating;
开始执行帧动画
-(void)stopAnimating;
停止执行帧动画
-(BOOL)isAnimating;
是否正在执行帧动画
MSMutableArray *arrayM = [MSMutableArray array];
UIImage *imgCat = [UIImage imageNamed:@"drink01.jpg"];
[arrayM addObject:imgCat];

设置图片
self.imgViewCat.animationImages = arrayM;
设置持续时间
self.imgViewCat.animationDuration = self.imgViewCat.animationImages.count *0.1;
设置是否重复播放
self.imgViewCat.animationRepeatCount = 1;
开始动画
[self.imgViewCat startAnimating]; 
  • 通过iamgeNamed:加载图片,加载好的图片会一直保存写在内存中,不会释放,这样下次如果再使用同样的图片的时候就不需要再重新加载了,因为内存里面已经有了
  • 缺点就是:如果加载了大量的图片,那么这些图片会一直保留在内存中,导程序占用内存过大(这就叫缓存),没有强指针引用也不会销毁
  • 解决方法:根据路径加载,该方法会销毁之前加载的图片,没有强指针引用就销毁
NSString *path = [[NSBundle mainBundle] pathForResource:@"cat.png" ofType:nil];
UIImage *imgCat = [UIImage imageWithContentsOfFile:path];

最后加上执行完毕清空图片缓存,调用延迟方法
将这个方法延迟运行:[self.imgViewCat setAnimationImages:nil];

[self.imgViewCat performSelector:@selector(setAnimationImages:) withObject:nil afterDelay:self.imgViewCat.animationImages.count*0.1];
  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-07-17 12:35:42  更:2021-07-17 12:35:46 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年4日历 -2024/4/26 17:01:38-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码