-----------android培训、java培训、java学习型技术博客、期待与您交流!------------
// C_DZViewController.h
// 03-第三个UI程序(改写图片旋转)
//
// Created by DavidAppleMac on 14-8-14.
// Copyright (c) 2014年 DavidCompany. All rights reserved.
//
#import <UIKit/UIKit.h>
@interface C_DZViewController :UIViewController
// 1. 把图片设置为成员对象变量,通过按钮来改变图片button得属性
@property (weak, nonatomic) IBOutletUIButton *btn;
// 2. 图片复原
- (IBAction)changeButtonPicture:(id)sender;
// 3. 图片上下,左右移动
- (IBAction)runPicture:(id)sender;
// 4. 图片左右旋转
- (IBAction)leftRightPicture:(id)sender;
// 5. 图片放大,缩小
- (IBAction)smallBigPIcture:(id)sender;
@end
//
// C_DZViewController.m
// 03-第三个UI程序(改写图片旋转)
//
// Created by DavidAppleMac on 14-8-14.
// Copyright (c) 2014年 DavidCompany. All rights reserved.
//
/*
注意:主要知识点在于
1》代码重构,对重复代码的反复提炼(特别是使用block,来简化代码)
2》对frame center 的使用
*/
#import "C_DZViewController.h"
// 通过宏定义或者const来定义程序中的常量
#define kmoveDistance 50
constCGFloat biggerValue = 1.3 ;
constCGFloat smallerValue = 0.6 ;
@interface C_DZViewController ()
@end
@implementation C_DZViewController
// 1. 通过block来进行代码重构,(特别是代码块中前后部分相同得部分得时候)
- (void)clickButton:(void (^)())myBlock
{
[UIViewbeginAnimations:nilcontext:nil] ;
[UIViewsetAnimationDuration:2] ;
myBlock() ;
[UIViewcommitAnimations] ;
}
// 2. 加载view空间,在程序一启动后进行
- (void)viewDidLoad
{
[superviewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
}
// 3. 释放可以被回收得资源,控制内存
- (void)didReceiveMemoryWarning
{
[superdidReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
#pragma mark 图片复位
- (IBAction)changeButtonPicture:(id)sender {
[selfclickButton:^{
// 4. CGAffineTransformIdentity为一个常量值,仅
self.btn.transform =CGAffineTransformIdentity ;
}] ;
}
#pragma mark 图片前后,左右移动
- (IBAction)runPicture:(id)sender
{
[selfclickButton:^{
// 5.1 用frame方法来移动图片,(注意:frame是一个结构体,成员变量不能直接来访问结构体得成员,只能通过赋值给一个中间变量得frame类型得结构体,来间接修改图片成员变量得frame得属性)
// CGRect tempFram = self.btn.frame ;
// 5.2 通过修改center的方法来移动图片,同样不可以直接修改center结构体的成员的值,(此外不能用bound来移动图片,因为bound的原点就是图像本身的左上定点,也就是说永远是0.0点,只能用它来修改宽高)
CGPoint tempCenter = self.btn.center ;
// 5.3 通过sender来接受按钮的tag,从而通过swish来判断做出什么行动
int tag = [sender tag] ;
switch (tag)
{
case 1:
// tempFram.origin.y -= kmoveDistance ;
tempCenter.y -=kmoveDistance ;
break;
case 2:
// tempFram.origin.y += kmoveDistance ;
tempCenter.y +=kmoveDistance ;
break;
case 3:
// tempFram.origin.x -= kmoveDistance ;
tempCenter.x -=kmoveDistance ;
break;
case 4:
// tempFram.origin.x += kmoveDistance ;
tempCenter.x +=kmoveDistance ;
break;
default:
break;
}
// 5.4 把修好好frame或者center的属性,重新赋值给成员变量btn
// self.btn.frame = tempFram ;
self.btn.center = tempCenter;
} ] ;
}
#pragma mark 图片左右旋转
- (IBAction)leftRightPicture:(id)sender {
[selfclickButton:^{
int tag = [sender tag] ;
// switch (tempTag) {
// case 5:
// self.btn.transform = CGAffineTransformRotate(_btn.transform, -M_PI_4) ;
// break;
// case 6:
// self.btn.transform = CGAffineTransformRotate(_btn.transform, M_PI_4) ;
// break;
//
// default:
// break;
// }
// 6. 代码重构,注意这种重构的方式
self.btn.transform =CGAffineTransformRotate(self.btn.transform,M_PI_4* (tag == 5 ? -1:1)) ;
}];
}
#pragma mark 图片放大或缩小
- (IBAction)smallBigPIcture:(id)sender {
[selfclickButton:^(){
int tag = [sender tag] ;
// switch (tag) {
// case 7:
// self.btn.transform = CGAffineTransformScale(_btn.transform, 1.3, 1.3) ;
// break;
// case 8:
// //self.btn.transform = CGAffineTransformTranslate(self.btn.transform, 0.8, 0.8) ;
// self.btn.transform = CGAffineTransformScale(_btn.transform, 0.6, 0.6) ;
// break;
//
// default:
// break;
// }
// 7. 代码重构
CGFloat setValue = tag == 7 ? biggerValue :smallerValue ;
self.btn.transform =CGAffineTransformScale(self.btn.transform,setValue , setValue);
}] ;
}
@end