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];

}
时间: 2024-10-06 10:32:18

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

android 裁剪图片大小 控制图片尺寸

用BitmapFactory获取适合屏幕大小的图片 和自带的图片裁剪工具 package com.lin.image; import android.app.Activity; import android.content.Intent; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.net.Uri; import android.os.Bundle; import an

[iOS微博项目 - 1.8] - 各种尺寸图片加载 & 控件不显示研究

A. 图片的加载: [UIImage imageNamed:@"home"];  加载png图片    一.非retina屏幕  1.3.5 inch(320 x 480)  * home.png    二.retina屏幕  1.3.5 inch(640 x 960)  * [email protected]    2.4.0 inch(640 x 1136)  * [email protected](如果home是程序的启动图片,才支持自动加载)    三.举例(以下情况都是系统自

iOS基础-UIKit框架-多控制器管理-UITabBarController

UITabBarController UITabBarController的简单使用 一.UITabBarController的创建(利用代码)1.新建一个空项目,在MJAppDelegate.m的didFinishLaunch...方法中//1.创建tabbar控制器UITabBarController *tabbarVc = [[UITabBarController alloc] init]: //2.设置为window的根控制器self.window.rootViewController

iOS基础-UIKit框架-多控制器管理-UINavigationController

一.导航控制器基本使用多控制器 导航控制器 导航控制器的简单使用1.创建一个空项目2.创建导航控制器nav3.设置导航控制器为Window的根控制器4.新建3个控制器类管理这3个View(勾上also create xib)在xib中添加一个标签用来注明是第几个控制器,添加一个按钮用来跳转到下一个控制器5.创建第一个控制器并添加到导航控制器中[nav pushViewController:one animated:YES]:6.监听用来跳转到第二个的按钮并实现方法-(IBAction)jump2

iOS基础之UIController(视图控制器)

个人认为视图控制器是比较重要的,那么我们先来了解下它的一些主要功能. 1.控制视图大小变换.布局视图.响应事件 2.检测以及处理内存警告 3.检测以及处理屏幕旋转 4.检测视图的切换 5.实现模块独立,提高复用性 视图控制器的第5个功能比较重要,运用的好的话能够给我们提供很大的方便. 如何创建UIController: //设置window的根视图控制器 //创建一个视图控制器 RootViewController *rootVC = [[RootViewController alloc]ini

iOS基础-UIKit框架-多控制器管理-Modal

Modal Modal效果 一.Modal演示(代码)1.事前准备1>新建一个空项目,删除默认控制器文件2>自定义2个控制器,将ViewController的Class分别设置为这个类3>创建一个window,将其根控制器设置为第一个自定义的控制器.2.拖一个按钮,监听这个按钮并实现方法(用来跳转到第二个界面)-(IBAction)jump{ //展示第二个控制器界面 MJTwoController *two = [[MJTwoViewController alloc] init]: [

iOS基础-UIKit框架-多控制器管理-Segue

一.什么是Segue? 二.Segue的属性 三.Segue的类型 四.自动型Segue(控件->控制器) 五.手动型Segue(控制器->控制器) 六.performSegueWithIdentifier:sender:

iOS基础-UIKit框架-多控制器管理-控制器创建和控制器view的创建

掌握 一.控制器的多种创建方式如何创建一个控制器 通过storyboard创建注意:加载UIStoryboard仅仅是加载名称叫做Test的storyboard,并不会创建 storyboard中的控制器以及控件 通过xib创建注意:要想让xib里的view设置为所创建控制器的view,必须设置xib的File's owner 为所创建控制器.并且File's owner点右键将view连到xib里的view上.storyboard默认已经完成了上述操作 二.控制器view的创建方式1.没有同名

web前端入门到实战:背景关联和缩写以及插图图片和背景图片的区别

一.背景属性缩写的格式 1.backgound:背景颜色 背景图片 平铺方式 关联方式 定位方式 2.注意点: 这里的所有值都可以省略,但是至少需要一个 3.什么是背景关联方式 默认情况下,背景图片会随着滚动条的滚动而滚动,如果不想这样,那么我们可以修改它们的关联方式 4.格式: background-attachment:值: 值的取值范围: scroll:默认值,会随着滚动条而滚动. fixed:不会随着滚动条滚动而滚动. 5.例子: <!DOCTYPE html> <html la