博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS基础项目之----图片控制器(控制图片的平移与缩放)
阅读量:4568 次
发布时间:2019-06-08

本文共 7965 字,大约阅读时间需要 26 分钟。

Main.storybord的大致布局如下:

 

代码部分:

ViewController.m:

#import "ViewController.h"//枚举typedef enum{kUpButton=1,kDownButton,kLeftButton,kRightButton,kMinifyButton,kPlusButton,kLeftRotateButton,kRightRotateButton}kTag;@interface ViewController ()@property (weak, nonatomic) IBOutlet UIButton *imagButton;@property (weak, nonatomic) IBOutlet UIButton *upButton;@property (weak, nonatomic) IBOutlet UIButton *downButton;@property (weak, nonatomic) IBOutlet UIButton *leftButton;@property (weak, nonatomic) IBOutlet UIButton *rightButton;@property (weak, nonatomic) IBOutlet UIButton *minifyButton;@property (weak, nonatomic) IBOutlet UIButton *plusButton;@property (weak, nonatomic) IBOutlet UIButton *LeftRotateButton;@property (weak, nonatomic) IBOutlet UIButton *RightRotateButton;@end@implementation ViewController- (void)viewDidLoad {    [super viewDidLoad];    // Do any additional setup after loading the view, typically from a nib.}- (void)didReceiveMemoryWarning {    [super didReceiveMemoryWarning];    // Dispose of any resources that can be recreated.}//移动- (IBAction)clickMoveButtons:(UIButton *)sender {        CGAffineTransform transform = self.imagButton.transform;       switch (sender.tag) {        case kUpButton:            transform =CGAffineTransformTranslate( transform, 0, -10);            break;        case kDownButton:            transform =CGAffineTransformTranslate( transform, 0, 10);            break;        case kLeftButton:            transform =CGAffineTransformTranslate( transform, -10, 0);            break;        case kRightButton:            transform =CGAffineTransformTranslate( transform, 10, 0);            break;          }    self.imagButton.transform=transform;    [self changeButtonsState];}//5  缩小//6  放大- (IBAction)clickScaleButtons:(UIButton *)sender {    CGAffineTransform transform = self.imagButton.transform;    switch (sender.tag) {        case kMinifyButton:                        //实现缩小效果            transform = CGAffineTransformScale(transform, 0.95, 0.95);            break;                    case kPlusButton:                        //实现放大效果            transform = CGAffineTransformScale(transform,1.05, 1.05);            break;    }        self.imagButton.transform = transform;    [self changeButtonsState];    }//禁用和释放按钮-(void)changeButtonsState{    //禁用和释放移动按钮    CGFloat topRangeOfButton = self.imagButton.frame.origin.y;    CGFloat leftRangeOfButton = self.imagButton.frame.origin.x;    CGFloat lowRangeOfButton = self.view.frame.size.height - topRangeOfButton - self.imagButton.frame.size.height;    CGFloat rightRangeOfButton = self.view.frame.size.width - leftRangeOfButton - self.imagButton.frame.size.width;    self.upButton.enabled=((topRangeOfButton-10)>=10);    self.leftButton.enabled=((leftRangeOfButton-10)>=10);    self.downButton.enabled=((lowRangeOfButton-10)>=10);    self.rightButton.enabled=((rightRangeOfButton-10)>=10);        //禁用和释放缩放按钮        self.plusButton.enabled =self.upButton.enabled && self.leftButton.enabled && self.downButton.enabled && self.rightButton.enabled;    self.minifyButton.enabled = (self.imagButton.frame.size.width>=50);}//旋转- (IBAction)clickRotateButton:(UIButton *)sender {    CGAffineTransform transform = self.imagButton.transform;    switch (sender.tag) {        case kLeftRotateButton://逆时针            transform = CGAffineTransformRotate(transform, -M_PI_4);            break;        case kRightRotateButton:            transform = CGAffineTransformRotate(transform, M_PI_2);            break;    }               self.imagButton.transform = transform;    }@end

 

上面是Transform实现图片的平移和缩放,实际上还有其他方法:

实现放大效果Button.frame  以左上角为原点进行缩放Button.bounds 以中心为原点进行缩放实现移动效果因为Button.bounds.origin是移动趋势,类似可读,是系统用来移动的,用户修改他得值是无法实现移动的,所以用中心点坐标centerButton.frame  以左上角为原点进行移动Button.center 以中心为原点进行移动frame和bounds的区别:1、进行缩放不同Button.frame  以左上角为原点进行缩放Button.bounds 以中心为原点进行缩放2、进行移动不同Button.frame  以左上角为原点进行移动Button.bounds 不能用来移动3、出现的时机不同,Button.bounds 出现的早一些,很多时候,无发获取frame中得origin,但是可以通过bounds 来获取origin

比如用Frame来实现相同的功能,代码如下:

#import "ViewController.h"//枚举typedef enum{kUpButton=1,kDownButton,kLeftButton,kRightButton,kMinifyButton,kPlusButton}kTag;@interface ViewController ()@property (weak, nonatomic) IBOutlet UIButton *imagButton;@property (weak, nonatomic) IBOutlet UIButton *upButton;@property (weak, nonatomic) IBOutlet UIButton *downButton;@property (weak, nonatomic) IBOutlet UIButton *leftButton;@property (weak, nonatomic) IBOutlet UIButton *rightButton;@property (weak, nonatomic) IBOutlet UIButton *minifyButton;@property (weak, nonatomic) IBOutlet UIButton *plusButton;@end@implementation ViewController- (void)viewDidLoad {    [super viewDidLoad];    // Do any additional setup after loading the view, typically from a nib.}- (void)didReceiveMemoryWarning {    [super didReceiveMemoryWarning];    // Dispose of any resources that can be recreated.}//移动- (IBAction)clickMoveButtons:(UIButton *)sender {        CGRect rec = self.imagButton.frame;       switch (sender.tag) {        case kUpButton:            rec.origin.y -=10;            break;        case kDownButton:            rec.origin.y +=10;            break;        case kLeftButton:            rec.origin.x -=10;            break;        case kRightButton:            rec.origin.x +=10;            break;          }    self.imagButton.frame=rec;    [self changeButtonsState];}//5  缩小//6  放大- (IBAction)clickScaleButtons:(UIButton *)sender {    CGRect rec = self.imagButton.frame;    switch (sender.tag) {        case kMinifyButton:                        //实现缩小效果            rec.size.height -=10;            rec.size.width -=10;                        //实现以图片的中心为原点进行缩小            rec.origin.x +=5;            rec.origin.y +=5;            break;                    case kPlusButton:                        //实现放大效果            rec.size.height +=10;            rec.size.width +=10;                        //实现以图片的中心为原点进行放大            rec.origin.x -=5;            rec.origin.y -=5;            break;    }        self.imagButton.frame = rec;    [self changeButtonsState];    }//禁用和释放按钮-(void)changeButtonsState{    //禁用和释放移动按钮    CGFloat topRangeOfButton = self.imagButton.frame.origin.y;    CGFloat leftRangeOfButton = self.imagButton.frame.origin.x;    CGFloat lowRangeOfButton = self.view.frame.size.height - topRangeOfButton - self.imagButton.frame.size.height;    CGFloat rightRangeOfButton = self.view.frame.size.width - leftRangeOfButton - self.imagButton.frame.size.width;    self.upButton.enabled=((topRangeOfButton-10)>=10);    self.leftButton.enabled=((leftRangeOfButton-10)>=10);    self.downButton.enabled=((lowRangeOfButton-10)>=10);    self.rightButton.enabled=((rightRangeOfButton-10)>=10);        //禁用和释放缩放按钮        self.plusButton.enabled =self.upButton.enabled && self.leftButton.enabled && self.downButton.enabled && self.rightButton.enabled;    self.minifyButton.enabled = (self.imagButton.frame.size.width>=50);}@end

又或者用center实现移动,代码如下:

//移动- (IBAction)clickMoveButtons:(UIButton *)sender {        CGPoint point = self.imagButton.center;       switch (sender.tag) {        case kUpButton:            point.y -= 10;            break;        case kDownButton:            point.y +=10;            break;        case kLeftButton:            point.x -=10;            break;        case kRightButton:            point.x +=10;            break;          }    self.imagButton.center=point;    [self changeButtonsState];}

用bouns实现缩放

- (IBAction)clickScaleButtons:(UIButton *)sender {    CGRect rec = self.imagButton.bounds;    switch (sender.tag) {        case kMinifyButton:                        //实现缩小效果            rec.size.height -=10;            rec.size.width -=10;                        break;                    case kPlusButton:                        //实现放大效果            rec.size.height +=10;            rec.size.width +=10;                        break;    }        self.imagButton.bounds = rec;    [self changeButtonsState];    }

 

转载于:https://www.cnblogs.com/Spacecup/p/4738223.html

你可能感兴趣的文章
编程我们学到了什么?
查看>>
面向过程和面向对象的对比(转)
查看>>
206. 反转链表
查看>>
622. 设计循环队列
查看>>
MCMC 、抽样算法与软件实现
查看>>
Java开源工具 网站开发工具清单
查看>>
POJ 1442 Black Box
查看>>
Python 内置模块:os模块
查看>>
C# 中的特性 Attribute
查看>>
Microsoft SQL Server, Error: 15128 ()
查看>>
学《数据结构》有感
查看>>
Hybrid App技术批量制作APP应用与跨平台解决方案
查看>>
eclipse下如何关联android-support-v4.jar源码
查看>>
§ 理论基础
查看>>
iis实现点击文件下载而不是打开文件
查看>>
Atitit. . 软件命名空间与类名命名单词的统计程序设计v2
查看>>
Atitit.如何建立研发体系
查看>>
HttpHandler给本站加图片水印
查看>>
js 整数型数组和字符型数组相互转换
查看>>
代码性能优化
查看>>