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响应用户手部移动时,操纵手势能被用于移动.缩放或旋转全息图像.如此的一个用处是使得用户可以在世界中绘 ...
随机推荐
- pycharm安装使用,python运算规则
首先讲了pycharm的安装和使用,基本上算是个脚本编辑器.另外pycharm的一些操作方法:http://edu.51cto.com/course/9043.html 葫芦老师录的pycharm视频 ...
- android viewStub
韩梦飞沙 韩亚飞 313134555@qq.com yue31313 han_meng_fei_sha 开发应用的时候,需要根据条件决定显示某个视图, 这个时候可以用ViewStub Stub ...
- 数据库中drop、delete与truncate的区别
数据库中drop.delete与truncate的区别 drop直接删掉表: truncate删除表中数据,再插入时自增长id又从1开始 :delete删除表中数据,可以加where字句. (1) D ...
- bzoj 4573: [Zjoi2016]大森林 lct splay
http://www.lydsy.com/JudgeOnline/problem.php?id=4573 http://blog.csdn.net/lych_cys/article/details/5 ...
- 细说React(一)
React 是近期非常热门的一个前端开发框架. 这篇文章将介绍如何使用 React 来创建用户界面,希望能够起到抛砖引玉的效果. "React, A JAVASCRIPT LIBRARY ...
- python开发_tkinter_多级子菜单
在之前的blog中有提到python的tkinter中的菜单操作 python开发_tkinter_窗口控件_自己制作的Python IDEL_博主推荐 python开发_tkinter_窗口控件_自 ...
- SGU 404 Fortune-telling with camomile
404. Fortune-telling with camomile Time limit per test: 0.25 second(s)Memory limit: 65536 kilobytes ...
- UVA 350 Pseudo-Random Numbers
Pseudo-Random Numbers Computers normally cannot generate really random numbers, but frequently are ...
- SCC缩点
int V; //顶点数量 vector<int> G[max_v]; //图的邻接表表示方法 vector<int> rG[max_v]; //把边反向建的图 vector& ...
- MySQL Proxy 实现MySQLDB 读写分离
一.简述 MySQL Proxy是一个处于你的client端和MySQL server端之间的简单程序,它可以监测.分析或改变它们的通信.它使用灵活,没有限制,常见的用途包括:负载平衡,故障.查询分析 ...