一 transform属性


在OC中,通过transform属性可以修改对象的平移,比例和旋转角度

常用的创建transform结构体的方法分两大类

(1) 创建"基于控件初始位置"的形变

CGAffineTransformMakeTranslation (平移)

CGAffineTransformMakeScale (缩放)

CGAffineTransformMakeRotation (旋转)

(2) 创建"基于transform参数"的形变

CGAffineTransformTranslate

CGAffineTransformScale

CGAffineTransformRotate

在OC中,所有跟角度相关的数值,都是弧度值,180º = M_PI

正数表示顺时针旋转

负数代表逆时针旋转

二 代码示例


 //
// RootViewController.m
// 练习使用按钮的frame和center属性
//
// Created by lovestarfish on 15/11/1.
// Copyright © 2015年 S&G. All rights reserved.
// #import "RootViewController.h" @interface RootViewController () @property (nonatomic,retain) UIButton *headImageView; @end @implementation RootViewController - (void)dealloc {
self.headImageView = nil;
[super dealloc];
} //枚举类型,从1开始
//枚举类型有一个很大的作用,就是用来代替程序中的魔法数字
typedef enum {
ktopbtntag = ,
kdownbtntag,
kleftbtntag,
krightbtntag
}btntag; /**
* viewDidLoad是视图加载完成后调用的方法,通常在此方法中执行视图控制器的初始工作
*/
- (void)viewDidLoad { //在viewDidLoad方法中,不要忘记调用父类的方法实现
[super viewDidLoad]; self.title = @"按钮的frame和center属性"; //一 手写控件代码
//1.使用类创建一个按钮对象,设置按钮对象为自定义型
UIButton *headBtn = [UIButton buttonWithType:UIButtonTypeCustom]; //2.设置对象的各项属性
//(1)位置等通用属性设置
headBtn.frame = CGRectMake(137.5, , , ); //(2)设置普通状态下按钮的属性
[headBtn setBackgroundImage:[UIImage imageNamed:@"xib1"] forState:UIControlStateNormal];
[headBtn setTitle:@"点我" forState:UIControlStateNormal];
[headBtn setTitleColor:[UIColor blueColor] forState:UIControlStateNormal]; //(3)设置高亮状态下按钮的属性
[headBtn setBackgroundImage:[UIImage imageNamed:@"xib2"] forState:UIControlStateHighlighted];
[headBtn setTitle:@"还行吧" forState:UIControlStateHighlighted];
[headBtn setTitleColor:[UIColor redColor] forState:UIControlStateHighlighted]; //3.把对象添加到视图中展现出来
[self.view addSubview:headBtn];
self.headImageView = headBtn; //二 写四个控制图片上下左右移动方向的控制按钮
//向上
UIButton *topBut = [UIButton buttonWithType:UIButtonTypeSystem];
topBut.frame = CGRectMake(167.5, , , );
[topBut setTitle:@"向上" forState:UIControlStateNormal];
topBut.tag = ;
[topBut addTarget:self action:@selector(click:) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:topBut]; //向下
UIButton *downBtn = [UIButton buttonWithType:UIButtonTypeSystem];
downBtn.frame = CGRectMake(167.5, , , );
[downBtn setTitle:@"向下" forState:UIControlStateNormal];
downBtn.tag = ;
[downBtn addTarget:self action:@selector(click:) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:downBtn]; //向左
UIButton *leftBtn = [UIButton buttonWithType:UIButtonTypeSystem];
leftBtn.frame = CGRectMake(, , , );
[leftBtn setTitle:@"向左" forState:UIControlStateNormal];
leftBtn.tag = ;
[leftBtn addTarget:self action:@selector(click:) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:leftBtn]; //向右
UIButton *rightBtn = [UIButton buttonWithType:UIButtonTypeSystem];
rightBtn.frame = CGRectMake(, , , );
[rightBtn setTitle:@"向右" forState:UIControlStateNormal];
rightBtn.tag = ;
[rightBtn addTarget:self action:@selector(click:) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:rightBtn]; //三 写两个缩放按钮
//放大
UIButton *plusBtn = [UIButton buttonWithType:UIButtonTypeSystem];
plusBtn.frame = CGRectMake(, , , );
[plusBtn setTitle:@"放大" forState:UIControlStateNormal];
plusBtn.tag = ;
[plusBtn addTarget:self action:@selector(zoom:) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:plusBtn];
//缩小
UIButton *minusBtn = [UIButton buttonWithType:UIButtonTypeSystem];
minusBtn.frame = CGRectMake(, , , );
[minusBtn setTitle:@"缩小" forState:UIControlStateNormal];
minusBtn.tag = ;
[minusBtn addTarget:self action:@selector(zoom:) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:minusBtn]; //向左旋转按钮
UIButton *leftRotateBtn = [UIButton buttonWithType:UIButtonTypeSystem];
leftRotateBtn.frame = CGRectMake(137.5, , , );
[leftRotateBtn setTitle:@"向左旋转" forState:UIControlStateNormal];
leftRotateBtn.tag = ;
[leftRotateBtn addTarget:self action:@selector(rotate:) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:leftRotateBtn];
//向右旋转按钮
UIButton *rightRotateBtn = [UIButton buttonWithType:UIButtonTypeSystem];
rightRotateBtn.frame = CGRectMake(137.5, , , );
[rightRotateBtn setTitle:@"向右旋转" forState:UIControlStateNormal];
rightRotateBtn.tag = ;
[rightRotateBtn addTarget:self action:@selector(rotate:) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:rightRotateBtn]; } /**
* 控制方向的多个按钮调用同一个方法
*/
- (void)click:(UIButton *)button {
CGPoint center = self.headImageView.center;
switch (button.tag) {
case ktopbtntag:
center.y -= ;
break;
case kdownbtntag:
center.y += ;
break;
case kleftbtntag:
center.x -= ;
break;
case krightbtntag:
center.x += ;
break;
default:
break;
}
//设置首尾动画
[UIView beginAnimations:nil context:nil];
self.headImageView.center = center;
//设置时间
[UIView setAnimationDuration:2.0];
[UIView commitAnimations];
NSLog(@"移动!");
} /**
* 缩放
*/
- (void)zoom:(UIButton *)button {
//使用frame,以自己的左上角(自己的原点)为原点
/*
CGRect frame = self.headImageView.frame;
if (button.tag) {
frame.size.height += 30;
frame.size.width += 30;
} else {
frame.size.width -= 50;
frame.size.height -= 50;
}
self.headImageView.frame = frame;
*/ //使用bounds,以中心点为原点进行缩放
CGRect bounds = self.headImageView.bounds;
if (button.tag) {
bounds.size.height += ;
bounds.size.width += ;
} else {
bounds.size.height -= ;
bounds.size.width -= ;
} //设置首尾动画
[UIView beginAnimations:nil context:nil];
self.headImageView.bounds = bounds;
[UIView setAnimationDuration:2.0];
[UIView commitAnimations];
} /**
* 旋转
*/
- (void)rotate:(UIButton *)button {
//位移(不累加)
// self.headImageView.transform = CGAffineTransformMakeTranslation(50, 200);
//缩放
// self.headImageView.transform = CGAffineTransformMakeScale(1.2, 0.5);
//在原有的基础上位移(是累加的)
// self.headImageView.transform = CGAffineTransformTranslate(self.headImageView.transform, 50, 50);
//在原有的基础上进行缩放
// self.headImageView.transform = CGAffineTransformScale(self.headImageView.transform, 1.5, 2.0); //在原有的基础上进行旋转
if (button.tag) {
//旋转的角度为1/pi,逆时针
self.headImageView.transform = CGAffineTransformRotate(self.headImageView.transform, -M_1_PI);
} else {
//旋转的角度为pi/2,顺时针
self.headImageView.transform = CGAffineTransformRotate(self.headImageView.transform, M_PI_2);
} } - (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
} @end

三 实现效果


iOS开发 -------- transform属性(形变)的更多相关文章

  1. Hello_IOS ios开发transform属性

    #import "ViewController.h" @interface ViewController () @property (weak, nonatomic) IBOutl ...

  2. ios开发transform属性

    #import "ViewController.h" @interface ViewController () @property (weak, nonatomic) IBOutl ...

  3. iOS开发-automaticallyAdjustsScrollViewInsets属性

    iOS开发-automaticallyAdjustsScrollViewInsets属性 Available in iOS 7.0 and later. 简单点说就是automaticallyAdju ...

  4. iOS开发-获取属性和方法

    iOS开发数据存储有两种方式,属性列表和对象编码,属性列表可以通过NSArray,NSMutableArray,NSMutableDictionary,存储对象我们可以通过归档和解档来完成.如果我们想 ...

  5. iOS开发之--属性关键字以及set和get方法

    一.属性分为三大类 1.读写性控制 a.readOnly只读,只会生成get方法,不会生成set方法 b.readWrite可读可写,会生成set方法,也会生成get方法(默认设置) 2.setter ...

  6. iOS开发transform的使用

    // //  ViewController.m //  18-transform的使用 #import "ViewController.h" @interface ViewCont ...

  7. IOS学习5——属性与成员变量

    [转]iOS中属性与成员变量的区别 ios中属性修饰符的作用 1. 属性用property声明 2. 简而言之,对于目前的ios开发,属性和成员变量的区别,完全可以不管. 3. 这个是历史原因造成的. ...

  8. iOS开发UI篇—transframe属性(形变)

    iOS开发UI篇—transframe属性(形变) 1. transform属性 在OC中,通过transform属性可以修改对象的平移.缩放比例和旋转角度 常用的创建transform结构体方法分两 ...

  9. iOS开发基础篇-transform属性

    一. transform 属性 在OC中,通过 transform 属性可以修改对象的平移.缩放比例和旋转角度. 1)创建“基于控件初始位置”的形变  CGAffineTransformMakeRot ...

随机推荐

  1. java后端实习,从最简单的crud做起

    现在就是做ssm框架下的sql语句,主要是select语句,sql语句没什么难的,孰能生巧,趁此机会,把自己的sql基础打扎实,也是一种实习的经验. 1.在子查询中字段的类型不相容怎么办? cast函 ...

  2. nvm的安装

    安装前可先卸载原来的node, npm, 安装成功后,可用nvm装node 一.用nvm-noinstall.zip安装 1.nvm-windows 下载 https://github.com/cor ...

  3. ubuntu 忽略文件的50unattended升级问题

    ubuntu出现这样问题 既然说那个文件扩展名无效,那干脆直接把那个文件删掉 sudo rm /etc/apt/apt.conf.d/20auto-upgrades.ucf-old 删掉之后应该就不会 ...

  4. python全栈开发 * 29知识点汇总 * 180712

    29 正则表达式 re模块一.正则表达式官方定义:正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符.及这些特定字符的组合,组成一个“规则字符串”, 这个“规则字符串”用来表达对字 ...

  5. 【ArcGIS for Server】制作并发布GP服务--缓冲分析为例

    https://www.cnblogs.com/d2ee/p/3641279.html https://www.jianshu.com/p/5331fa708fe5 https://www.cnblo ...

  6. Hibernate的条件查询的几种方式+查询所有的记录

    条件查询 . 第一种,用?占位符,如: //登录(用?占位符) public List<UserPO> LoginUser(UserPO up)throws Exception{ Sess ...

  7. sx1278 手册参考

    记录下芯片的重要数据和内容,方便查阅,无代码实现 参考程序地址:http://www.pudn.com/Download/item/id/3070942.html  http://www.cirmal ...

  8. 271A

    #include <stdio.h> #include <stdlib.h> #include <string.h> #include <stdbool.h& ...

  9. C 二叉查找树的基本操作

    最近研究一下二叉树排序问题,找到的资料还真是五花八门,说得也是千奇百怪. 分析一下原因,还是因为数的特性,造成结果的不唯一性造成的大家看了很多,似乎都有理,好像明白了,一综合又糊涂了的结果. 我这里给 ...

  10. python_的面向对象编程

    废话不多说,先弄个对象来看看 class Student(object): def __init__(self, name, score): self.name = name self.score = ...