终于效果图:



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. python opencv3 窗口显示摄像头的帧

    git:https://github.com/linyi0604/Computer-Vision # coding:utf8 import cv2 """ 在窗口显示摄像 ...

  2. 排序算法之冒泡排序Java实现

    排序算法之冒泡排序 舞蹈演示排序: 冒泡排序: http://t.cn/hrf58M 希尔排序:http://t.cn/hrosvb  选择排序:http://t.cn/hros6e  插入排序:ht ...

  3. CF17E Palisection 差分+manacher算法

    题目大意: 给定一个串$S$,询问有多少对相交的回文子串 直接做的办法: 我们先考虑求出以$i$为结尾的串的数量,这个很好统计 之后,我们再求出所有包含了点$i$的回文串的数目 这个相当于在$i$的左 ...

  4. C/C++ 之输入输出

    因为C++向下兼容C,所以有多种输入输出的方式,cin/cout十分简洁,但个人觉得不如scanf/printf来的强大,而且在做算法题时,后者运行速度也快些. scanf/printf #inclu ...

  5. OpenGL和GLSL版本更迭

    前言 最近才发现,自己写的glsl和教程的glsl版本对不上,一直以为是xcode不允许使用太高版本,只能使用OpenGL 2.0的版本,却不知使用glfw可以使用到最新的OpenGL版本.

  6. 关于THINKPHP的addAll支持的最大数据量

    Thinkphp中的Model操作有两个方法:add()和addAll $User = M("User"); // 实例化User对象 $data['name'] = 'Think ...

  7. Codeforces Round #354 (Div. 2) B. Pyramid of Glasses 模拟

    B. Pyramid of Glasses 题目连接: http://www.codeforces.com/contest/676/problem/B Description Mary has jus ...

  8. webbench1.5源码读后总结

    webbench简介 webbench由C语言写成的用于网站压力测试的一个非常简单的工具,它最多可以模拟30000个并发连接去进行测试. webbench的安装和使用可以自行百度,也可以过下这篇文章. ...

  9. PowerDesigner导出图片

    但是通过上面导出的图片会比较模糊不清晰,但是可以通过这样解决: 1.放大设计,然后全选复制全部 2.打开画图工具 3.粘贴到画图工具

  10. C#Arcengine通过坐标点生成面(环形)

    来自:http://www.cnblogs.com/lee24789229/p/5481978.html 通过传入坐标点,返回几何图形,此代码部分可以生成环形面. 方法一 private IGeome ...