热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

iOS基础(二)

UIView视图,表示屏幕上的一块矩形区域,同时处理该区域的绘制和触屏事件。一个视图也可以作为其他视图的父视图,同时决定着这些子视图的位置和大小.UIView类做了大量的工作去管理
UIView
  • 视图,表示屏幕上的一块矩形区域,同时处理该区域的绘制和触屏事件。
  • 一个视图也可以作为其他视图的父视图,同时决定着这些子视图的位置和大小.
  • UIView类做了大量的工作去管理这些内部视图的关系。
  • 视图同时也是App中MVC的View部分
  • iPhone的视图以左上角为原点
  • 每个View的frame所使用的坐标系以它的父视图的左上角为坐
    关函数
    • 视图结构和相

CGPoint Point = CGPointMake(x,y);//设置
CGSize size = CGSizeMake(width,height);//大小
CGRect rect = CGRectMake(x,y,width,height);//位置和大小

Frame和Bounds

  • Frame以其父视图为起点,得出它自己的位置信息
  • Bounds以iOS系统的坐标原点为起点,坐标是(0,0)
  • Center表示视图中心所在的位置,设置此属性可改变视图的位置
    • 默认情况下,视图边框并不会被父视图的边框裁剪。如果需要裁剪,将其clipsToBounds属性设置为YES.

创建UIView

  • 创建UI有两种方式,xib文件和代码创建

“`Objective-c
//通过xib方式来创建视图对象
NSBundle *bundle = [NSBundle mainBundle];
NSArray *arr = [bundle loadNibNamed:@”myView” owner:self
options:nil];
UIView *myView = [arr objectAtIndex:0];


```Objective-c
//代码创建视图对象
CGRect viewRect = CGRectMake(0,0,100,100);
UIView *myView =[[UIView alloc] initWithFrame:viewRect];

视图的层次结构

  • UIView层次结构可以理解为“视图树”————view hierarychy
  • 一个视图就是一个容器,当一个视图包含其他的视图的时候,两个视图之间就建立了一个父子关系,被包含的视图被称为“姿势图(subView)”,包含的视图称为“父视图(superView)”
  • 从视觉上看,子视图会覆盖父视图的内容,设置透明属性可以看到父视图的内容。
  • 每个父视图都有一个有序的数组存储着它的子视图,存储的顺序就会影响到每个子视图的显示效果,后加的视图会覆盖之前的视图。
  • 一个视图可以嵌入多个subView,但是只能有一个superView。
    • 视图的常用方法
      “`Objective-c
      addSubView: // 添加子视图
      insertSubview:atIndex: // 视图插入到指定索引位置
      insertSubview:ahoveSubview: // 视图插入指定视图之上
      insertSubview:belowSubview: // 视图插入指定视图之下
      bringSubviewToFront: // 把视图移动到最顶层
      sendSubviewToBack: // 把视图移动到最底层
      exchangeSubViewAtIndex:withSubviewAtIndex://把两个索引对应的视图调换位置
      removeFromSuperview: // 把视图从父视图中移除


##查找视图
- UIView类中有一个tag属性,通过这个属性可以标志一个视图对象(整数)
- 获取的方法,viewWithTag:方法来检索标志过的子视图
```Objective-c
UIView *myView = [[UIView alloc] initWithFrame:CGRectmake(0,0,100,100)];
myView.tag = 100;
// 通过tag查找view
UIView *myView = [self.view vieWithTag:100];

UIView的常用属性

  • alpha // 透明度
  • backgroundColor // 背景颜色
  • subViews // 子视图集合
  • hidden // 是否隐藏
  • tag // 标签值
  • superview // 父视图
  • mulitpleTouchEnaled // 是否开启多点触摸
  • userInteractionEnabled // 是否响应触摸事件

坐标系统变换

  • 坐标变换通过transform属性来改变
    • CGAffineTransformScale 对视图比例缩放
    • CGAffineTransformRotae 对视图做变焦旋转
    • CGAffineTransformTranslate 对视图相对原位置做平移

CGAffineTransform transform = rootView.transform;
rootView.transform = CGAffineTransformScale(transform,0.5,0.5);
rootView.transform = CGAffineTransformRotae(transform,0.33);
CGAffineTransformScale(transform,0.5,0.5);
rootView.transform = CGAffineTransformTranslate(transform,100,100);

视图的内容模式

  • 视图的contentMode属性决定了边界变化和缩放操作

UIImageView *imgeView1 = [[UIImageView alloc] initWithFrame:CFRectMake(320/2-200/2,30,200,200)];
imgeView1.imge = [UIImage imageNamed:@"01"];
imgeView1.backgroundColor = [UIColor redColor];
imgeView1.cOntentMode= UIViewContentModeScaleAspectFit;
[self.window addSubview:imgeView1];
[imView1 release];
UIImageView *imgeView2 = [[UIImageView alloc] initWithFrame:CFRectMake(320/2-200/2,240,200,200)];
imgeView2.backgroundColor = [UIColor yelloColor];
imgeView2.cOntentMode= UIViewContentModeBottom;
[self.window addSubview:imgeView2];
[imView2 release];

UIView属性的动画

  • UIView类的很多属性都被设计为动画,动画的属性是指当属性从一个值变为另一个值的时候,可以半自动地支持动画,你仍然必须告诉UIKit希望执行什么类型的动画,但是动画一旦开始,Core Animation就会全权负责。UIView对象中支持动画的属性有如下几个:
    • frame – 动画的改变视图的尺寸和位置
    • bounds – 动画的改变视图的尺寸
    • center – 动画的改变视图的位置
    • transform – 动画的翻转或者缩放视x图
    • alpha – 动画的改变视图的透明度
    • backgroundColor – 改变视图的背景色
    • contentStetch – 改变视图内容如何拉伸

配置动画委托

  • 可以为动画分配一个委托,并通过该委托接受动画开始和结束的消息。当需要在动画开始前和动画结束后极力执行其他任务时,可能就需要设置委托。
  • 通过UIView调用setAnmationDelegate:方法来设置委托,并通过setAnimationWillStartSelector:和setAnimationDidStopSelector:方法来指定接受消息的选择器方法。消息处理方法形式如下:
    (void)animationWillStart:(NSString *)animationID context:(void *)context;
    (void)animationDidStop:(NSString *)animationID finished context:(void *)context;
    上面的两个方法的animationID和context参数和动画块开始时传给beginAnimations:context:方法的参数相同
    + animationID – 应用程序提供的字符串,用于标识一个动画块中的动画
    + context – 应用程序提供的对象,用于向委托对象传递额外的信息

    setAnimationDidStopSelector:选择器方法还有一个参数——即一个布尔值。如果动画顺利完成,没有被其他动画取消或停止,则该值为YES。

配置动画的参数

  • setAnimationStartDateS方法来设置动画在commitAnimations:方法返回之后的发生日期。
  • setAnimationDelay:方法来设置实际发生动画和commitAnimations:方法返回的时间点之间的间隔
  • setAnimationDuration:方法来设置动画的持续秒数
  • setAnimationCurve:方法来设置动画过程的相对速度,比如动画可能在启动阶段逐渐加速、而在结束阶段逐渐减少,或者这个过程都保持相同的速度
  • setAnimationRepeatCount:方法来设置动画的重复次数
  • setAnimationRepeatAutoreverses:方法来指定动画在到达目标值时是否自动反向播放。可是结合使用这个方法和setAnimationRepeatCount:方法,使各个属性在初始值和目标值之间平滑切换一段时间。
  • 缺省情况下,所有支持动画的属性在动画块中发生的变化都会形成动画。如果希望让动画块中发生的某些变化不产生动画效果,可以通过setAnimationsEnableed:方法来暂时禁止动画,在完成修改后才重新激活动画,在调用setAnimationsEnabled:方法并传入NO值之后,所有的改变都不会产生动画效果,指定用YES值再次调用这个方法或者提交这个动画块是,动画才会恢复,可以用areAnimationsEnable:方法来确定当前是否激活动画。

-(void)animationAlpha
{
[UIView beginAnimations:nil context:NULL];// 需要设置代理时
[UIView setAnimationDuration:1];// 动画的持续时间
[UIview setAnimationDelay:1];// 动画延迟时间
view2.apleha = 0.0;
[UIView commitAnimations];// 标记着动画块的结束
}
-(void)animationFrame
{
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:5];
[UIView setAnimationCurve:UIViewAnimationCurveEaseOut];// 动画相对速度,开始和结束的时候慢,中间快
view.center = CGPointMake(0,0);
[UIView commitAnimations];
}

推荐阅读
  • STL迭代器的种类及其功能介绍
    本文介绍了标准模板库(STL)定义的五种迭代器的种类和功能。通过图表展示了这几种迭代器之间的关系,并详细描述了各个迭代器的功能和使用方法。其中,输入迭代器用于从容器中读取元素,输出迭代器用于向容器中写入元素,正向迭代器是输入迭代器和输出迭代器的组合。本文的目的是帮助读者更好地理解STL迭代器的使用方法和特点。 ... [详细]
  • 本文介绍了H5游戏性能优化和调试技巧,包括从问题表象出发进行优化、排除外部问题导致的卡顿、帧率设定、减少drawcall的方法、UI优化和图集渲染等八个理念。对于游戏程序员来说,解决游戏性能问题是一个关键的任务,本文提供了一些有用的参考价值。摘要长度为183字。 ... [详细]
  • 解决Cydia数据库错误:could not open file /var/lib/dpkg/status 的方法
    本文介绍了解决iOS系统中Cydia数据库错误的方法。通过使用苹果电脑上的Impactor工具和NewTerm软件,以及ifunbox工具和终端命令,可以解决该问题。具体步骤包括下载所需工具、连接手机到电脑、安装NewTerm、下载ifunbox并注册Dropbox账号、下载并解压lib.zip文件、将lib文件夹拖入Books文件夹中,并将lib文件夹拷贝到/var/目录下。以上方法适用于已经越狱且出现Cydia数据库错误的iPhone手机。 ... [详细]
  • 本文介绍了Linux Shell中括号和整数扩展的使用方法,包括命令组、命令替换、初始化数组以及算术表达式和逻辑判断的相关内容。括号中的命令将会在新开的子shell中顺序执行,括号中的变量不能被脚本余下的部分使用。命令替换可以用于将命令的标准输出作为另一个命令的输入。括号中的运算符和表达式符合C语言运算规则,可以用在整数扩展中进行算术计算和逻辑判断。 ... [详细]
  • 本文介绍了iOS数据库Sqlite的SQL语句分类和常见约束关键字。SQL语句分为DDL、DML和DQL三种类型,其中DDL语句用于定义、删除和修改数据表,关键字包括create、drop和alter。常见约束关键字包括if not exists、if exists、primary key、autoincrement、not null和default。此外,还介绍了常见的数据库数据类型,包括integer、text和real。 ... [详细]
  • 本文介绍了使用哈夫曼树实现文件压缩和解压的方法。首先对数据结构课程设计中的代码进行了分析,包括使用时间调用、常量定义和统计文件中各个字符时相关的结构体。然后讨论了哈夫曼树的实现原理和算法。最后介绍了文件压缩和解压的具体步骤,包括字符统计、构建哈夫曼树、生成编码表、编码和解码过程。通过实例演示了文件压缩和解压的效果。本文的内容对于理解哈夫曼树的实现原理和应用具有一定的参考价值。 ... [详细]
  • 本文介绍了解决Facebook脸书面试题中插入区间的方法,通过模拟遍历的方式判断当前元素与要插入元素的关系,找到插入点并将新区间插入。同时对算法的时间复杂度和空间复杂度进行了分析。 ... [详细]
  • macOS Big Sur全新设计大版本更新,10+个值得关注的新功能
    本文介绍了Apple发布的新一代操作系统macOS Big Sur,该系统采用全新的界面设计,包括图标、应用界面、程序坞和菜单栏等方面的变化。新系统还增加了通知中心、桌面小组件、强化的Safari浏览器以及隐私保护等多项功能。文章指出,macOS Big Sur的设计与iPadOS越来越接近,结合了去年iPadOS对鼠标的完善等功能。 ... [详细]
  • 本文介绍了Cocos2dx学习笔记中的更新函数scheduleUpdate、进度计时器CCProgressTo和滚动视图CCScrollView的用法。详细介绍了scheduleUpdate函数的作用和使用方法,以及schedule函数的区别。同时,还提供了相关的代码示例。 ... [详细]
  • Spring框架《一》简介
    Spring框架《一》1.Spring概述1.1简介1.2Spring模板二、IOC容器和Bean1.IOC和DI简介2.三种通过类型获取bean3.给bean的属性赋值3.1依赖 ... [详细]
  • [转载]从零开始学习OpenGL ES之四 – 光效
    继续我们的iPhoneOpenGLES之旅,我们将讨论光效。目前,我们没有加入任何光效。幸运的是,OpenGL在没有设置光效的情况下仍然可 ... [详细]
  • 今天凌晨开始苹果正式开始了iOS10的推送工作,使用iPhone和iPad的用户可 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • Oracle优化新常态的五大禁止及其性能隐患
    本文介绍了Oracle优化新常态中的五大禁止措施,包括禁止外键、禁止视图、禁止触发器、禁止存储过程和禁止JOB,并分析了这些禁止措施可能带来的性能隐患。文章还讨论了这些禁止措施在C/S架构和B/S架构中的不同应用情况,并提出了解决方案。 ... [详细]
  • C++语言入门:数组的基本知识和应用领域
    本文介绍了C++语言的基本知识和应用领域,包括C++语言与Python语言的区别、C++语言的结构化特点、关键字和控制语句的使用、运算符的种类和表达式的灵活性、各种数据类型的运算以及指针概念的引入。同时,还探讨了C++语言在代码效率方面的优势和与汇编语言的比较。对于想要学习C++语言的初学者来说,本文提供了一个简洁而全面的入门指南。 ... [详细]
author-avatar
瀡訫飛
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有