iOS_2_button控制物体形变
终于效果图:
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控制物体形变的更多相关文章
- Maya 脚本控制物体自转
在Maya中,我们可以用脚本来控制物体的自转方向,速度等等,步骤如下: 选择需要操作的物体object,打开通道盒Channel Box,点击编辑Edit,打开表达式Expressions面板 选择需 ...
- Unity3D 几个基本动画(控制物体移动、旋转、缩放)
Transform基本移动函数: 1.指定方向移动: //移动速度 float TranslateSpeed = 10f; //Vector3.forward 表示"向前" tra ...
- Unity编程回忆录之控制物体移动
最新心血来潮,然后开始学习Unity3D游戏开发引擎,对于一个主流的跨平台3D游戏开发引擎,我已经深深的为他着迷了,于是果断的开始学习这个引擎,而且刚刚预装的游戏引擎最新版中4.3版本已经开始原生支持 ...
- Unity —— 通过鼠标点击控制物体移动
//ClickMove - - 通过鼠标点击控制物体移动 using System.Collections; using System.Collections.Generic; using Unity ...
- Unity3d 控制物体移动、旋转、缩放
在Unity中通过利用 Input Manager(输入管理器)可以很简单的实现对一个物体进行移动.旋转.缩放操作. 演示代码: //通过虚拟轴控制物体移动.旋转.缩放 public class Mo ...
- [Silverlight 2.0 控制物体绕圆弧运行(C#初探篇)]
我自己写的第一个 Silverlight 2.0 程序 [Silverlight 2.0 控制物体绕圆弧运行(C#初探篇)] 程序运行时:小地球将绕着圆形轨迹做圆周运动. ...
- Unity3D_(游戏)控制物体的上、下、左、右移动
通过键盘上↑.↓.←.→实现对物体的控制 using System.Collections; using System.Collections.Generic; using UnityEngine; ...
- Tips3:通过Layer下拉菜单来锁定游戏物体和控制物体的可视化
通过把不同的游戏物体放在不同的Layer里面能对不同类的游戏物体进行很方便的控制,如果某些游戏物体创建后你不想再改动,如地面 装饰 什么的, 你可以通过点击Layer下拉菜单把它们锁定了 也可以通过控 ...
- Hololens开发笔记之Gesture手势识别(Manipulation手势控制物体旋转)
Manipulation gesture:保持点击手势,在3D世界中绝对运动 当你想要全息图像1:1响应用户手部移动时,操纵手势能被用于移动.缩放或旋转全息图像.如此的一个用处是使得用户可以在世界中绘 ...
随机推荐
- ARC 101 D - Median of Medians
题面在这里! 这种题只能二分答案把qwwq,直接做根本做不了啊... 首先你需要知道如何通过 一个区间<=x的数有多少个 来判断x和这个区间中位数的关系. 很显然当数有至少 [L/2]+1 个( ...
- 优客365 v2.9版本 后台存在SQL注入
安装 打开后台登陆界面 http://localhost:9096/yk365/system/login.php 输入单引号报错 得到表名 经过跟踪后在\module\login.php文件出现错误 ...
- oracle复杂查询是sql
一.over()分析函数 分组查前几条:select * from test t where (select count(*) from test a where t.type=a.type and ...
- centos7安装kafka_2.11-1.0.0 新手入门
系统环境 1.操作系统:64位CentOS Linux release 7.2.1511 (Core) 2.jdk版本:1.8.0_121 3.zookeeper版本:zookeeper-3.4.9. ...
- TCP半连接和syn攻击(转)
TCP半连接和syn攻击 转载 2014年04月06日 21:36:10 4243 摘自:http://blog.sina.com.cn/s/blog_54b5ea250100g2r8.html SY ...
- 四种更新UI的方法
笔记: // 使用handler.post(Runnable)更新UI public void updateUI_Fun1() { new Thread() { public void run() ...
- AndroidMainifest标签使用说明1——<action>
1.<action> 格式: <action android:name="string" /> 父标签: <intent-filter> 描写叙 ...
- .NET:事务、并发、并发问题、事务隔离级别、锁等相关资料整理
这里面的有三篇文章,必须要读读:http://technet.microsoft.com/en-us/library/ms189130(v=sql.105).aspx. 这里有一个系列,我还没有读:h ...
- RobotFramework自动化4-批量操作案例
前言 有时候一个页面上有多个对象需要操作,如果一个个去定位的话,比较繁琐,这时候就可以定位一组对象.Selenium2library提供了Get Webelements 关键字,用于定位一组元素 以百 ...
- Android网络通信Volley框架源代码浅析(二)
尊重原创 http://write.blog.csdn.net/postedit/25921795 在前面的一片文章Volley框架浅析(一)中我们知道在RequestQueue这个类中,有两个队列: ...