iOS基础项目之----图片控制器(控制图片的平移与缩放)

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是移动趋势,类似可读,是系统用来移动的,用户修改他得值是无法实现移动的,所以用中心点坐标center
Button.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];
    
}

 

posted @ 2015-08-18 02:53  Spacecup  阅读(780)  评论(0编辑  收藏  举报