终于效果图:



BeyondViewController.h

//
// BeyondViewController.h
// 02_button控制物体形变
//
// Created by beyond on 14-7-21.
// Copyright (c) 2014年 com.beyond. All rights reserved.
// #import <UIKit/UIKit.h> @interface BeyondViewController : UIViewController
// 控制器成员记住界面上的头像button
@property (weak, nonatomic) IBOutlet UIButton *headBtn;
// button控制 head button 上 下 左 右 移动
- (IBAction)btnClick:(UIButton *)sender;
- (IBAction)AffineTransform:(UIButton *)sender;
- (IBAction)reset:(UIButton *)sender; @end

BeyondViewController.m

//
// BeyondViewController.m
// 02_按钮控制物体形变
//
// Created by beyond on 14-7-21.
// Copyright (c) 2014年 com.beyond. All rights reserved.
// #import "BeyondViewController.h" #define kDelta 20
const int DELTA = 50; @interface BeyondViewController ()
{
// 左旋转 最笨方法 成员变量 记住弧度 可累计
CGFloat _angel; // 成员记住 headBtn默认的frame
CGRect _headBtnFrame;
}
@end @implementation BeyondViewController - (void)viewDidLoad
{
[super viewDidLoad];
// view一载入 就用 成员 记住 headBtn的初始位置
_headBtnFrame = _headBtn.frame; // 调用自己定义方法,代码创建 buttuon
[self addButtionByCoding];
[self addTextFieldByCoding]; } # pragma mark - 按钮控制 head button 上 下 左 右 移动
- (void)moveByFrame:(UIButton *)sender
{
// UIView的类方法 实现动画效果(開始动画)
[UIView beginAnimations:nil context:nil];
// 默认动画持续时间是 0.2
[UIView setAnimationDuration:1]; // 下面三步为OC标准代码,由于OC中不同意直接修该对象中结构体属性的成员的值,要通过中间的暂时结构体变量
CGRect frame = self.headBtn.frame;
// 一般数字是一样的话就能够抽取为: 1,变量; 2,宏; 3,const int
// CGFloat delta = 50;
// #define kDelta 50
// const int DELTA = 50; int tag = [sender tag];
switch (tag) {
case 1:
frame.origin.y -= kDelta;
break;
case 2:
frame.origin.x += kDelta;
break;
case 3:
frame.origin.y += kDelta;
break;
case 4:
frame.origin.x -= kDelta;
break; default:
break;
} self.headBtn.frame=frame; // UIView的类方法 实现动画效果(结束动画)
[UIView commitAnimations];
}
- (IBAction)btnClick:(UIButton *)sender { [self animateWithBlock:^{ // 下面三步为OC标准代码,由于OC中不同意直接修该对象中结构体属性的成员的值,要通过中间的暂时结构体变量
CGPoint center = self.headBtn.center;
// 一般数字是一样的话就能够抽取为: 1,变量; 2,宏; 3,const int
// CGFloat delta = 50;
// #define kDelta 50
// const int DELTA = 50; int tag = [sender tag];
switch (tag) {
case 1:
center.y -= kDelta;
break;
case 2:
center.x += kDelta;
break;
case 3:
center.y += kDelta;
break;
case 4:
center.x -= kDelta;
break; default:
break;
} self.headBtn.center = center; }]; } #pragma mark - 按钮控制 head button 左右旋转 放大 缩小
- (IBAction)AffineTransform:(UIButton *)sender { // UIView的类方法 实现动画效果(開始动画)
[UIView beginAnimations:nil context:nil];
// 默认动画持续时间是 0.2
[UIView setAnimationDuration:1];
int tag = [sender tag];
switch (tag) {
case 11:
// _angel -= M_PI_4;
// 旋转 顺时针为正方向,使用弧度 M_PI_4 就是顺时针旋转45度
//_headBtn.transform = CGAffineTransformMakeRotation(_angel); // CGAffineTransformRotate方法:返回一个新的结构体,是一个在原来 的结构体基础上进行一定弧度旋转的新的结构体
_headBtn.transform = CGAffineTransformRotate(_headBtn.transform, - M_PI_4);
break;
case 12:
// _angel += M_PI_4;
// 旋转 顺时针为正方向,使用弧度 M_PI_4 就是顺时针旋转45度
//_headBtn.transform = CGAffineTransformMakeRotation(_angel); // CGAffineTransformRotate方法:返回一个新的结构体,是一个在原来 的结构体基础上进行一定弧度旋转的新的结构体
_headBtn.transform = CGAffineTransformRotate(_headBtn.transform, M_PI_4);
break;
case 13:
// 缩小
// _headBtn.transform = CGAffineTransformMakeScale(0.5, 0.5);
_headBtn.transform = CGAffineTransformScale(_headBtn.transform, 0.8, 0.8);
break;
case 14:
// 放大
// _headBtn.transform = CGAffineTransformMakeScale(1.5, 1.5);
_headBtn.transform = CGAffineTransformScale(_headBtn.transform, 1.2, 1.2);
break;
case 0:
// 点击headBtn的时候,清空并还原为默认状态
_headBtn.transform = CGAffineTransformIdentity;
_headBtn.frame = _headBtnFrame;
break;
default:
break;
} // UIView的类方法 实现动画效果(结束动画)
[UIView commitAnimations];
} #pragma mark - 通过block封装代码
// void (^myBlock)();
void (^myBlock)() = ^{
NSLog(@"beyond");
};
// 手动调用block()时有点问题 - (void)animateWithBlock:(void(^)())block
{
// UIView的类方法 实现动画效果(開始动画)
[UIView beginAnimations:nil context:nil];
// 默认动画持续时间是 0.2
[UIView setAnimationDuration:1]; block(); // UIView的类方法 实现动画效果(结束动画)
[UIView commitAnimations];
}
- (IBAction)reset:(UIButton *)sender {
[self animateWithBlock:^{
// 点击的时候,清空并还原为默认状态
_headBtn.transform = CGAffineTransformIdentity;
_headBtn.frame = _headBtnFrame;
}];
} - (void) addButtionByCoding
{
// 1,用类方法创建 button实例
UIButton *button = [[UIButton alloc] init];
// 2,设置button的细节
button.frame = CGRectMake(0, 0, 100, 100); // 正常状态
[button setTitle:@"normal" forState:UIControlStateNormal];
[button setTitleColor:[UIColor redColor] forState:UIControlStateNormal];
// [button setImage:[UIImage imageNamed:@"btn_01.png"] forState:UIControlStateNormal];
[button setBackgroundImage:[UIImage imageNamed:@"btn_01.png"] forState:UIControlStateNormal];
// 点击时高亮状态
[button setTitle:@"highlighted" forState:UIControlStateHighlighted];
[button setTitleColor:[UIColor blueColor] forState:UIControlStateNormal];
// [button setImage:[UIImage imageNamed:@"btn_02.png"] forState:UIControlStateHighlighted];
[button setBackgroundImage:[UIImage imageNamed:@"btn_02.png"] forState:UIControlStateHighlighted];
// 为按钮加入点击事件
[button addTarget:self action:@selector(codeBtnClick:) forControlEvents:UIControlEventTouchUpInside];
// 3,加入button到当前控制器的view里面
[self.view addSubview:button];
}
// 代码创建的按钮的点击事件
- (void) codeBtnClick:(UIButton *)sender
{
NSLog(@"%@",sender);
NSLog(@"%p",sender);
}
// 代码创建文本输入框
- (void) addTextFieldByCoding
{
// 1,类方法创建控件
UITextField *textField = [[UITextField alloc]init];
// 2,控件细节
textField.frame = CGRectMake(100, 0, 100, 100);
textField.backgroundColor = [UIColor grayColor];
// 系统字体大小
textField.font = [UIFont systemFontOfSize:20];
textField.font = [UIFont boldSystemFontOfSize:30];
// 居中显示
CGFloat x = self.view.frame.size.width*0.5;
CGFloat y = self.view.frame.size.height*0.5;
// textField.center = CGPointMake(x, y);
// 下面三步为OC标准代码,由于OC中不同意直接修该对象中结构体属性的成员的值,要通过中间的暂时结构体变量
CGPoint center = textField.center;
center.x = x;
center.y = y;
textField.center = center; // 3,将控件加入到当前控制器的view
[self.view addSubview:textField];
}
@end

效果图

iOS_2_button控制物体形变的更多相关文章

  1. Maya 脚本控制物体自转

    在Maya中,我们可以用脚本来控制物体的自转方向,速度等等,步骤如下: 选择需要操作的物体object,打开通道盒Channel Box,点击编辑Edit,打开表达式Expressions面板 选择需 ...

  2. Unity3D 几个基本动画(控制物体移动、旋转、缩放)

    Transform基本移动函数: 1.指定方向移动: //移动速度 float TranslateSpeed = 10f; //Vector3.forward 表示"向前" tra ...

  3. Unity编程回忆录之控制物体移动

    最新心血来潮,然后开始学习Unity3D游戏开发引擎,对于一个主流的跨平台3D游戏开发引擎,我已经深深的为他着迷了,于是果断的开始学习这个引擎,而且刚刚预装的游戏引擎最新版中4.3版本已经开始原生支持 ...

  4. Unity —— 通过鼠标点击控制物体移动

    //ClickMove - - 通过鼠标点击控制物体移动 using System.Collections; using System.Collections.Generic; using Unity ...

  5. Unity3d 控制物体移动、旋转、缩放

    在Unity中通过利用 Input Manager(输入管理器)可以很简单的实现对一个物体进行移动.旋转.缩放操作. 演示代码: //通过虚拟轴控制物体移动.旋转.缩放 public class Mo ...

  6. [Silverlight 2.0 控制物体绕圆弧运行(C#初探篇)]

    我自己写的第一个 Silverlight 2.0 程序    [Silverlight 2.0 控制物体绕圆弧运行(C#初探篇)]            程序运行时:小地球将绕着圆形轨迹做圆周运动. ...

  7. Unity3D_(游戏)控制物体的上、下、左、右移动

    通过键盘上↑.↓.←.→实现对物体的控制 using System.Collections; using System.Collections.Generic; using UnityEngine; ...

  8. Tips3:通过Layer下拉菜单来锁定游戏物体和控制物体的可视化

    通过把不同的游戏物体放在不同的Layer里面能对不同类的游戏物体进行很方便的控制,如果某些游戏物体创建后你不想再改动,如地面 装饰 什么的, 你可以通过点击Layer下拉菜单把它们锁定了 也可以通过控 ...

  9. Hololens开发笔记之Gesture手势识别(Manipulation手势控制物体旋转)

    Manipulation gesture:保持点击手势,在3D世界中绝对运动 当你想要全息图像1:1响应用户手部移动时,操纵手势能被用于移动.缩放或旋转全息图像.如此的一个用处是使得用户可以在世界中绘 ...

随机推荐

  1. SQLSERVER——查看阻塞信息(sp_who_lock优化无误版)

    经常会需要分析SQLSERVER的阻塞情况,尤其是某些SQL操作异常缓慢从而怀疑是有人在搞事情的情况下.网上有许多一模一样的帖子,是关于sp_who_lock这个存储过程的,然而,网上流传的这个是略有 ...

  2. 洛谷.4252.[NOI2006]聪明的导游(提答 直径 随机化)

    题目链接 随机化 暴力: 随便从一个点开始DFS,每次从之前得到的f[i]最大的子节点开始DFS.f[i]为从i开始(之前)能得到的最大答案. 要注意的是f[i]应当有机会从更小的答案更新, 9.10 ...

  3. Go Web编程 第四章--处理请求

    请求和响应 Request结构 URL字段 Header字段 Body字段 Form, PostForm, MultipartForm字段 在处理器函数中,我们可以通过Request获取各个字段的详细 ...

  4. 最小生成树 Prim(普里姆)算法和Kruskal(克鲁斯特尔)算法

    Prim算法 1.概览 普里姆算法(Prim算法),图论中的一种算法,可在加权连通图里搜索最小生成树.意即由此算法搜索到的边子集所构成的树中,不但包括了连通图里的所有顶点(英语:Vertex (gra ...

  5. 【洛谷】2474:[SCOI2008]天平【差分约束系统】

    P2474 [SCOI2008]天平 题目背景 2008四川NOI省选 题目描述 你有n个砝码,均为1克,2克或者3克.你并不清楚每个砝码的重量,但你知道其中一些砝码重量的大小关系.你把其中两个砝码A ...

  6. bzoj 1209

    三维凸包裸题. 1.通过volume计算有向体积,判断点与面的位置关系. 2.噪声 /********************************************************* ...

  7. 【ButterKnife】 安卓程序猿的一大利器

    注:近期才看到的这个类库,来自于jakewharton大神的力作,安卓里面的视图注入库 另小弟水平有限,翻译的不好,还请多多指正 首先是地址(托管在github上):http://jakewharto ...

  8. HTML中显示的文字自动换行

    在html中控制自动换行 http://www.cnblogs.com/zjxbetter/articles/1323449.html eg: <table> <tr> < ...

  9. js单例模式详解实例

    这篇文章主要介绍了什么是单例单例模式.使用场景,提供了3个示例给大家参考 什么是单例? 单例要求一个类有且只有一个实例,提供一个全局的访问点.因此它要绕过常规的控制器,使其只能有一个实例,供使用者使用 ...

  10. BTA 常问的 Java基础40道常见面试题及详细答案

    原文:http://www.ymq.io/2018/03/10/java/ 八种基本数据类型的大小,以及他们的封装类 引用数据类型 Switch能否用string做参数 equals与==的区别 自动 ...