利用Button实现移动, 缩放, 旋转, 重置等功能.

在UIView里面有一个叫做Button的View, 这个控件简单来说就是点击, 就是手机上我们一切可以点击的东西都是Button, 现在我们利用这一个控件来实现上面等更能.

PS: 方法和注释都在文件工程里面, 你们可以下载下来运行一下试试, 这里我就只写代码了.

关于怎么使用UIButton, 各位可以去百度一下, 有专门视频讲解, 这里贴图比较麻烦, 不好操作, 请谅解.

ViewController.h声明所有的方法.

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController

//声明被控制的UIButton的属性.
@property (weak, nonatomic) IBOutlet UIButton *btn;

//声明上下左右的移动方法.
- (IBAction)button:(id)sender;

//声明缩放方法.
- (IBAction)scale:(id)sender;

//声明旋转的方法.
- (IBAction)rotate:(id)sender;

//初始化Button.
- (IBAction)initialize:(id)sender;
@end

ViewController.m文件, 实现所有的方法.

#import "ViewController.h"

//也可以创建一个宏, 这样子更加方便一些, 不用浪费内存空间.
#define kDelta 10

@interface ViewController ()
@end

@implementation ViewController

- (void)btnCilickWithblock:(void (^)())block
{
    //动画准备开始
    [UIView beginAnimations:nil context:nil];
    //动画运行的时间
    [UIView setAnimationDuration:1.0f];
    //实现方法.
    block();
    //运行动画.
    [UIView commitAnimations];
}

#pragma mark 控制按钮走动 (上下左右)
- (IBAction)button:(id)sender
{
    [self btnCilickWithblock:^{
        //这里除了用frame, 还可以使用center
        CGRect frame = _btn.frame;
//        CGPoint tmpcenter = _btn.center;
        //为什么使用CGFloat呢, 因为origin是继承与CGRect, CGRect又是浮点类型, 所以要使用CGFloat.
        //    CGFloat dale = 50;
        //可以使用switch方法, 也可以使用if判断方法, 按照个人喜欢.
        //由于sender是id类型, 不能使用.操作符, 所以只能用get方法.
        switch ([sender tag]) {
            case 1:
                frame.origin.y -= kDelta;
                if(frame.origin.y <= 10)
                {
                    frame.origin.y = 0;
                }
//                tmpcenter.y -= kDelta;
                break;
            case 2:
                frame.origin.x += kDelta;
                if(frame.origin.x >= 210)
                {
                    frame.origin.x = 220;
                }
//                tmpcenter.x += kDelta;
                break;
            case 3:
                frame.origin.y += kDelta;
                if(frame.origin.y >= 458)
                {
                    frame.origin.y = 468;
                }
//                tmpcenter.y += kDelta;
                break;
            case 4:
                frame.origin.x -= kDelta;
                if(frame.origin.x <= 10)
                {
                    frame.origin.x = 0;
                }
//                tmpcenter.x -= kDelta;
                break;
            default:
                break;
        }
        _btn.frame = frame;
//        _btn.center = tmpcenter;
    }];
}
#pragma mark 旋转
- (IBAction)rotate:(id)sender {
    //弧度 3.14 - π
    //角度 180
    //这里系统已经给我们定义好了一个宏.
    //逆时针旋转在宏的前面加上-操作符, 否则就是+操作符.
    //这里的M_PI_4意思就是旋转45°.
    //    _btn.transform = CGAffineTransformMakeRotation(-M_PI_4);
    [self btnCilickWithblock:^{
        if (5 == [sender tag])
        {
            _btn.transform = CGAffineTransformRotate(_btn.transform, M_PI_2 * - 1);
        }
        else if(6 == [sender tag])
        {
            _btn.transform = CGAffineTransformRotate(_btn.transform, M_PI_2 * 1);
        }

    }];
}
#pragma mark 缩放
- (IBAction)scale:(id)sender
{
    [self btnCilickWithblock:^{
        //使用三目运算符来判断是哪个按钮.
        CGFloat scale = [sender tag] == 7? 1.2: 0.8;
        //判断按钮标签.
        if([sender tag] == 7)
        {
            _btn.transform = CGAffineTransformScale(_btn.transform, scale, scale);
        }
        else if ([sender tag] == 8)
        {
            _btn.transform = CGAffineTransformScale(_btn.transform, scale, scale);
        }
    }];
}
#pragma mark 初始化
- (IBAction)initialize:(id)sender {
    [self btnCilickWithblock:^{
        //初始化之前所有的形变属性.
        _btn.transform = CGAffineTransformIdentity;
    }];
}
@end

工程下载地址:

http://files.cnblogs.com/iOSCain/%E6%8C%89%E9%92%AE%E7%9A%84%E7%8A%B6%E6%80%81.zip

时间: 2024-07-31 19:17:11

利用Button实现移动, 缩放, 旋转, 重置等功能.的相关文章

iOS手势识别的详细使用(拖动,缩放,旋转,点击,手势依赖,自定义手势)

其余的请见:http://blog.csdn.net/totogo2010/article/details/8615940 1.UIGestureRecognizer介绍 手势识别在iOS上非常重要,手势操作移动设备的重要特征,极大的增加了移动设备使用便捷性. iOS系统在3.2以后,为方便开发这使用一些常用的手势,提供了UIGestureRecognizer类.手势识别UIGestureRecognizer类是个抽象类,下面的子类是具体的手势,开发这可以直接使用这些手势识别. UITapGes

WPF/Silverlight中图形的平移,缩放,旋转,倾斜变换演示

原文:WPF/Silverlight中图形的平移,缩放,旋转,倾斜变换演示 为方便描述, 这里仅以正方形来做演示, 其他图形从略. 运行时效果图: XAML代码:// Transform.XAML <Canvas Width="700" Height="700" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"  xmlns:x="http://sc

iOS手势UIGestureRecognizer识别的详细使用(拖动,缩放,旋转,点击,手势依赖,自定义手势) (转)

1.UIGestureRecognizer介绍 手势识别在iOS上非常重要,手势操作移动设备的重要特征,极大的增加了移动设备使用便捷性. iOS系统在3.2以后,为方便开发这使用一些常用的手势,提供了UIGestureRecognizer类.手势识别UIGestureRecognizer类是个抽象类,下面的子类是具体的手势,开发这可以直接使用这些手势识别. UITapGestureRecognizer UIPinchGestureRecognizer UIRotationGestureRecog

input 和 button元素 作为提交、重置、按钮功用的区别。

首先,input元素和button元素 都是可以作为普通按钮.提交按钮.重置按钮的. <input type="button" value="button"> <input type="submit"> <input type="reset"> input元素默认 text类型 <button type="button">button</button&g

js旋转图片的功能

最近突然想研究一下js旋转图片的功能.对于之前的实现方式,就不先说了.现在HTML5很不错,主要了解一下HTML5中的图片旋转吧. 实例演示:  http://www.imqing.com/demo/rotateImg.html 原理:利用canvas对象来旋转. 实现方式:首先创建一个canvas元素,然后把img元素绘入canvas.但是,实际上,这是默认情况,就是图片没旋转时.如果图片要旋转90度的话,就需要先把canvas画布旋转90度后再绘图. 描述如下: (内部旋转原理是这样的,图片

SharePoint重置密码功能Demo

博客地址 http://blog.csdn.net/foxdave 本文将说明一个简单的重置SharePoint用户密码(NTLM Windows认证)的功能如何实现 重置密码功能,实际上就是重置域用户密码的功能,其实很简单. 解决方案结构如下图所示: 1. 创建SharePoint空解决方案. 2. 添加一个空元素,命名为ResetPassword,并将随之生成的Feature也一并修改,范围选择Site. 3. 我们想将重置密码的功能添加到用户菜单下,所以在空元素的Emlements.xml

利用AVFoundation实现Blink拍照和录像的功能

利用AVFoundation实现Blink拍照和录像的功能 by 伍雪颖 github代码 前几天偶然发现一个app叫Blink,闲来无事,纯当练手,于是就尝试下自己实现它的功能. 页面都挺简单的 1.打开相机 - (void)openCamera:(AVCaptureDevicePosition)cameraPostion { BOOL hasCamera = ([[AVCaptureDevice devices] count] > 0); if (hasCamera) { AVCapture

利用js加载本地图片预览功能

直接上代码: 经测试,除safari6包括6以下不支持,其他均可正常显示. 原因:safari6不支持filereader,同时不能使用IE滤镜导致失效. fix: 可以利用canvas,解决safari6的问题 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

Unity3D利用欧拉角实现实体的旋转

刚刚入门U3D,也是很多东西搞不懂,最先接触的就是自己尝试去获取键盘上的GetPress之类的事件了吧 官方的API DOC也是帮了不少忙,到处吸收了各位博主的文章也是获益匪浅~ 话又说回来,最近遇到的问题就是如何新建一个camera并且利用鼠标四处查看场景,一路试下来发现transform.Rotate不能良好实现这个事件 (PS:Z轴会乱动) 后来发现必须用四元数或者欧拉角来解决,这两个也算是transform里面的几只老虎了 先贴一个看见的视频,关于欧拉角 其实游戏物体的属性视图中调整的角