UI003:动画简单使用,动态添加控件

1.简单动画的2种实现方式:

系统会根据某个属性值的改编,自动形成动画。

  • 头尾式动画:
// 修改center坐标。
[UIView beginAnimations:nil context:nil]; // 1.开启动画
[UIView setAnimationDuration: 2]; // 2. 设置动画执行时间,单位s
// ******需要执行动画的代码******
self.btnIcon.center = centerPoint;
[UIView commitAnimations]; // 3. 提交动画
  • Block式动画:推荐使用
[UIView animateWithDuration:0.5  animations: ^{
    // 需要执行动画的代码
    self.btnIcon.frame = originFrame;
}];

通过以下属性可以修改控件的位置

  • frame.origin
  • center

通过以下属性,可以修改空间的尺寸

  • frame.size
  • bounds.size

2. UIKit坐标系

在UIKit中,坐标系的原点(0, 0)在左上角,x值向右正向延伸,y值向下正向延伸。
center是控件中心点的(x, y)坐标。

3. 动态添加控件。

// 当要显示一个界面时,首先创建这个界面对应的控制器,控制器创建好后,
// 接着创建控制器所管理的那个view,这个view加载完毕后,就开始执行下面的方法。
// 所以,只要viewDidLoad方法被执行了,就表示控制器所管理的view 创建好了。
- (void)viewDidLoad {
    [super viewDidLoad];
    // 1. 动态创建按钮
    UIButton *button = [[UIButton alloc] init];
    // UIButton *button =[Button butonWithType:UIButtonTypeCustom];
    // 2.设置按钮上的文字,文字颜色
    [button setTitle:@"点我吧" forState:UIControlStateNormal];
    [button setTitle:@"点击状态文字" forState:UIControlStateHighlighted];
    [button setTitleColor:[UIColor redColor] forState:UIControlStateNormal];
    [button setTitleColor:[UIColor greenColor] forState:UIControlStateHighlighted];
    
    // 3.设置不同状态的背景图
    UIImage *imgNormal = [UIImage imageNamed:@"btn_01"];
    UIImage *imgHighlighted = [UIImage imageNamed:@"btn_02"];
    [button setBackgroundImage:imgNormal forState:UIControlStateNormal];
    [button setBackgroundImage:imgHighlighted forState:UIControlStateHighlighted];
    // 设置按钮frame
    button.frame = CGRectMake(50, 50, 100, 100);
    // 4.为按钮注册单击事件
    [button addTarget:self  action:@selector(buttonClick) forControlEvents:UIControlEventTouchUpInside];
       
    // 5.把按钮添加到控制器所管理的view中。
    [self.view addSubview:button];
}
-(void)buttonClick {
    NSLog(@"按钮被点击了");
}


离线文档安装路径:
路径1:
/Applications/Xcode.app/Contents/Developer/Documentation/DocSets
路径2:
/Users/tq/Library/Developer/Shared/Documentation/DocSets


transform实现平移,旋转效果 :

  • 利用transform属性可以修改位移,缩放,旋转。
    创建1个transrorm属性。
    CGAffineTransform CGAffineTransformMakeTranslation(CGFloat tx, CGFloat ty); // 平移,向上是负的值。向下是正值,原始值0.
    CGAffineTransform CGAffineTransformMakeScale(CGFloat sx, CFGloat sy); // 缩放
    CGAffineTransform CGAffineTransformMakeRotation(CGFloat angle); // 旋转:angle是弧度值。
    // 45°,对应 M_PI_4;

  • 在某个transform的基础上进行叠加。使用原来的transform值再位移。
    CGAffineTransform CGAffineTransformTranslation(CGAffineTransform t, CGFloat tx, CGFloat ty);
    CGAffineTransform CGAffineTransformScale(CGAffineTransform t, CGFloat sx, CFGloat sy);
    CGAffineTransform CGAffineTransformRotation(CGAffineTransform t, CGFloat angle);

清空之前设置的transform:回到原来的位置。
view.transform = CGAffineTransformIdentity;

-(IBAction) move {
    // CGAffineTransform transForm = self.btnIcon.transform;
    // self.btnIcon.transform = CGAffineTransformMakeTranslation(0, -50); // 基于原点,向上平移50
    self.btnIcon.transform = CGAffineTransformTranslation(self.btnIcon.transform, 0, 50); // 向下平移50
}
-(IBAction) scale {
    // self.btnIcon.transform = CGAffineTransformScale(0.5, 0.5); // 缩小
    self.btnIcon.transform = CGAffineTransformScale(self.btnIcon.transform, 1.5, 1.5); // 基于原来的值放大
}
-(IBAction) rotate {
    // 同时执行多个动画
    [UIView animateWithDuration:2  animations:^ {
        self.btnIcon.transform = CGAffineTransformScale(self.btnIcon.transform, 1.5, 1.5);
        self.btnIcon.transform = CGAffineTransformMakeRotation(self.btnIcon.transform, M_PI_4); 
        self.btnIcon.transform = CGAffineTransformTranslation(self.btnIcon.transform, 0, 50); 
    }];
}

UIView常见属性

@property(nonatomic, readonly) UIView *superView;
获得自己的父控件对象。

@property(nonatomic, readonly, copy) NSArray *subviews;
得到自己所有子控件对象

@property(nonatomic) NSInteger tag;
控件的id(标识),父控件可以通过tag来找到对应的子控件。

@property(nonatomic) CGAffineTransform transform;
控件的形变属性:可设置旋转角度,缩放比例,平移等属性。

常见方法:
-(void)addSubview:(UIView *)view;
添加1个子控件view
-(void)removeFromSuperview; 从父控件中移除
-(UIView *)viewWithTag:(NSInteger)tag;
根据1个tag标识,找到对应的控件。(一般都是子控件。)



最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,911评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,014评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 142,129评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,283评论 1 264
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,159评论 4 357
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,161评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,565评论 3 382
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,251评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,531评论 1 292
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,619评论 2 310
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,383评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,255评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,624评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,916评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,199评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,553评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,756评论 2 335

推荐阅读更多精彩内容

  • 2023.5.5周五 吃了辣酱于是肚子一直很痛,睡不好,梦见到处找厕所,睡前右眼又过敏水肿,好在半夜起来去厕所发现...
    偏偏喜欢你sky阅读 69评论 0 1
  • 缘起有24种,因缘有6种,佛是能够看见世间一切缘起的人,修行必须身心合一,看见自己的缘起。 缘起诸支不应是对于生死...
    S爱笑的眼睛阅读 54评论 0 1
  • Ukrainischer Kult-Comic kommt nach Berlin:Alle lieben „Ma...
    Eva_9c90阅读 573评论 0 0
  • 2023.5.6 心若有所向往,何惧道阻且长。 读书卡 1.真正的修行是内观和觉察,大自然的振动频率特别高,是最接...
    坚持读写阅读 95评论 0 0
  • 希望我这个爱哭、爱笑、爱瞎想的人,调整好心态,拐个弯,与自己和解,未来的日子,会越来越好
    碎碎念丶阅读 65评论 0 0