UI(手势综合运用)代码实现简单相册
2014-08-28 23:22
405 查看
//布局视图
.m文件
// ControllerView.m
// PhotoAlbum
// Copyright (c) 2014年 Summer. All rights reserved
#import
"ControllerView.h"
#import
"UIColor+RandomColor.h"
@implementation ControllerView
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
// Initialization code
self.gestureBtnArr = [NSMutableArray
array];
self.animationArr = [NSMutableArray
array];
[self
titleButton];
[self
animationImage];
[self
animationButton];
}
return self;
}
- (void)titleButton
{
NSArray *btnArr = @[@"轻拍",
@"长按", @"轻扫",
@"平移", @"捏合",
@"旋转", @"边缘"];
NSInteger n = 0;
for (int i = 0; i <
7; i++) {
UIButton *gestureBtn = [UIButton
buttonWithType:UIButtonTypeCustom];
gestureBtn.frame =
CGRectMake(20 +
40 * i, 40, 40,
30);
gestureBtn.layer.borderWidth =
1;
gestureBtn.layer.cornerRadius =
5;
gestureBtn.backgroundColor = [UIColor
randomColor];
[gestureBtn
setTitle:btnArr
forState:UIControlStateNormal];
[gestureBtn
setTitleColor:[UIColor
blackColor] forState:UIControlStateNormal];
gestureBtn.tag =
100 + i;
[self
addSubview:gestureBtn];
[self.gestureBtnArr
addObject:gestureBtn];
n++;
}
}
- (void)animationImage
{
self.animationZombieImages = [NSMutableArray
array];
for (int i = 0; i <
22; i++) {
UIImage *image = [UIImage
imageWithContentsOfFile:[[NSBundle
mainBundle] pathForResource:[NSString
stringWithFormat:@"Zombie%d", i +
1] ofType:@"tiff"]];
[_animationZombieImages
addObject:image];
}
self.animationSunFlowerImages1 = [NSMutableArray
array];
for (int i = 0; i <
18; i++) {
UIImage *image1 = [UIImage
imageWithContentsOfFile:[[NSBundle
mainBundle] pathForResource:[NSString
stringWithFormat:@"SunFlower_%d", i +
1] ofType:@"tiff"]];
[_animationSunFlowerImages1
addObject:image1];
}
self.imageView = [[UIImageView
alloc] initWithImage:[UIImage
imageWithContentsOfFile:[[NSBundle
mainBundle] pathForResource:@"Meinu1"
ofType:@"JPG"]]];
_imageView.userInteractionEnabled =
YES;
_imageView.frame = CGRectMake(60,
90, 200, 320);
//设置播放完一组动态图片的时间
_imageView.animationDuration =
1;
[self
addSubview:_imageView];
[_imageView
release];
}
- (void)animationButton
{
NSArray *animationArray = @[@"开始动画",
@"结束动画"];
NSInteger n = 0;
for (int i = 0; i <
2; i++) {
self.animationBtn = [UIButton
buttonWithType:UIButtonTypeCustom];
_animationBtn.frame = CGRectMake(20 +
150 * i, 430,
130, 30);
_animationBtn.layer.borderWidth =
1;
_animationBtn.layer.cornerRadius =
5;
_animationBtn.backgroundColor = [UIColor
randomColor];
[_animationBtn
setTitle:animationArray
forState:UIControlStateNormal];
[_animationBtn
setTitleColor:[UIColor
blackColor] forState:UIControlStateNormal];
_animationBtn.tag = 200 + i;
[self
addSubview:_animationBtn];
[self.animationArr
addObject:_animationBtn];
n++;
}
}
- (void)dealloc
{
self.imageView = nil;
[super
dealloc];
}
/*
// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
- (void)drawRect:(CGRect)rect
{
// Drawing code
}
*/
@end
.h文件
// ControllerView.h
// PhotoAlbum
// Copyright (c) 2014年 Summer. All rights reserved.
#import
<UIKit/UIKit.h>
@interface ControllerView :
UIView
@property (nonatomic,
retain) NSMutableArray *gestureBtnArr;//存储控制手势切换的按钮
@property (nonatomic,
retain) NSMutableArray *animationArr;//存储动画按钮
@property (nonatomic,
retain) NSMutableArray *animationZombieImages;
@property (nonatomic,
retain) NSMutableArray *animationSunFlowerImages1;
@property (nonatomic,
retain) UIImageView *imageView;
@property (nonatomic,
retain) UIButton *animationBtn;
@end
//手势操作触发的事件
// RootViewController.m
// PhotoAlbum
// Copyright (c) 2014年 Summer. All rights reserved.
#import
"RootViewController.h"
#import
"ControllerView.h"
@interface
RootViewController ()
{
ControllerView *_controView;
CGFloat _totalRotation;
}
@end
@implementation RootViewController
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil
bundle:nibBundleOrNil];
if (self) {
// Custom initialization
}
return self;
}
- (void)loadView
{
_controView = [[ControllerView alloc]
init];
_controView.backgroundColor = [UIColor
yellowColor];
self.view =
_controView;
[_controView
release];
//给button添加事件
for (UIButton *btn
in _controView.gestureBtnArr) {
[btn
addTarget:self
action:@selector(changeGesture:)
forControlEvents:UIControlEventTouchUpInside];
}
for (UIButton *btn
in _controView.animationArr) {
[btn
addTarget:self
action:@selector(changeAnimation:)
forControlEvents:UIControlEventTouchUpInside];
}
}
- (void)changeGesture:(UIButton *)btn
{
switch (btn.tag) {
case 100:
[self
tapGesture:btn];
break;
case 101:
[self
longPressGesture:btn];
break;
case 102:
[self
swipeGesture:btn];
break;
case 103:
[self
panGesture:btn];
break;
case 104:
[self
pinchGesture:btn];
break;
case 105:
[self
rotationGesture:btn];
break;
case 106:
[self
screenEdgePanGesture:btn];
break;
default:
break;
}
}
#pragma mark tapGesture
- (void)tapGesture:(UIButton *)tapBtn
{
[self
recoverImageView:_controView.imageView.gestureRecognizers.firstObject];
[self
removeGestureRecognizer];
UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer
alloc] initWithTarget:self
action:@selector(handleTapGesture:)];
//设置轻拍次数
tapGesture.numberOfTapsRequired =
1;
//给视图添加轻拍手势
[_controView.imageView
addGestureRecognizer:tapGesture];
[tapGesture
release];
}
//轻拍手势
- (void)handleTapGesture:(UITapGestureRecognizer *)tapGesture
{
static int i = 2;
_controView.imageView.image = [UIImage
imageWithContentsOfFile:[[NSBundle
mainBundle] pathForResource:[NSString
stringWithFormat:@"Meinu%d", i]
ofType:@"JPG"]];
i++;
if (8 == i) {
i =
1;
}
}
#pragma mark longPressGesture
- (void)longPressGesture:(UIButton *)longPressBtn
{
[self
recoverImageView:_controView.imageView.gestureRecognizers.firstObject];
[self
removeGestureRecognizer];
UILongPressGestureRecognizer *longPressGesture = [[UILongPressGestureRecognizer
alloc] initWithTarget:self
action:@selector(handleLongPressGesture:)];
//设置长按触发的最短时间
longPressGesture.minimumPressDuration =
1;
[_controView.imageView
addGestureRecognizer:longPressGesture];
[longPressGesture
release];
}
- (void)handleLongPressGesture:(UILongPressGestureRecognizer *)longPressGesture
{
UIImageWriteToSavedPhotosAlbum(_controView.imageView.image,
nil, nil,
nil);
if (UIGestureRecognizerStateBegan == longPressGesture.state) {
UIAlertView *alertView = [[UIAlertView
alloc] initWithTitle:@"提示"
message:@"是否保存到相册" delegate:self
cancelButtonTitle:@"否" otherButtonTitles:@"是",
nil];
[alertView
show];
[alertView
release];
}
}
#pragma mark swipeGesture
- (void)swipeGesture:(UIButton *)swipeBtn
{
[self
recoverImageView:_controView.imageView.gestureRecognizers.firstObject];
[self
removeGestureRecognizer];
_controView.imageView.image = [UIImage
imageWithContentsOfFile:[[NSBundle
mainBundle] pathForResource:@"NBA1"
ofType:@"JPG"]];
UISwipeGestureRecognizer *swipeGesture = [[UISwipeGestureRecognizer
alloc] initWithTarget:self
action:@selector(handleSwipeGesture:)];
swipeGesture.direction =
UISwipeGestureRecognizerDirectionLeft | UISwipeGestureRecognizerDirectionRight;
[_controView.imageView
addGestureRecognizer:swipeGesture];
[swipeGesture
release];
}
- (void)handleSwipeGesture:(UISwipeGestureRecognizer *)swipeGesture
{
static int i = 1;
if (swipeGesture.direction == 2) {
i++;
if (7 == i) {
i =
1;
}
_controView.imageView.image = [UIImage
imageWithContentsOfFile:[[NSBundle
mainBundle] pathForResource:[NSString
stringWithFormat:@"NBA%d", i]
ofType:@"JPG"]];
}else
if (swipeGesture.direction ==
3){
i--;
if (0 == i) {
i =
5;
}
_controView.imageView.image = [UIImage
imageWithContentsOfFile:[[NSBundle
mainBundle] pathForResource:[NSString
stringWithFormat:@"NBA%d", i]
ofType:@"JPG"]];
}
}
#pragma mark panGesture
- (void)panGesture:(UIButton *)panBtn
{
[self
recoverImageView:_controView.imageView.gestureRecognizers.firstObject];
[self
removeGestureRecognizer];
UIPanGestureRecognizer *panGesture = [[UIPanGestureRecognizer
alloc] initWithTarget:self
action:@selector(handlePanGesture:)];
[_controView.imageView
addGestureRecognizer:panGesture];
[panGesture
release];
}
- (void)handlePanGesture:(UIPanGestureRecognizer *)panGesture
{
//获取平移前后的改变量
CGPoint point = [panGesture translationInView:panGesture.view];
panGesture.view.transform =
CGAffineTransformTranslate(panGesture.view.transform, point.x, point.y);
//将之前的增量清零
[panGesture
setTranslation:CGPointZero
inView:panGesture.view];
}
#pragma mark pinchGesture
- (void)pinchGesture:(UIButton *)pinchBtn
{
[self
recoverImageView:_controView.imageView.gestureRecognizers.firstObject];
[self
removeGestureRecognizer];
UIPinchGestureRecognizer *pinchGesture = [[UIPinchGestureRecognizer
alloc] initWithTarget:self
action:@selector(handlePinchGesture:)];
[_controView.imageView
addGestureRecognizer:pinchGesture];
[pinchGesture
release];
}
- (void)handlePinchGesture:(UIPinchGestureRecognizer *)pinchGesture
{
pinchGesture.view.transform =
CGAffineTransformScale(pinchGesture.view.transform, pinchGesture.scale, pinchGesture.scale);
pinchGesture.scale =
1.0;
}
#pragma mark rotationGesture
- (void)rotationGesture:(UIButton *)rotationBtn
{
[self
recoverImageView:_controView.imageView.gestureRecognizers.firstObject];
[self
removeGestureRecognizer];
UIRotationGestureRecognizer *rotationGesture = [[UIRotationGestureRecognizer
alloc] initWithTarget:self
action:@selector(handleRotationGesture:)];
[_controView.imageView
addGestureRecognizer:rotationGesture];
[rotationGesture
release];
}
- (void)handleRotationGesture:(UIRotationGestureRecognizer *)rotationGesture
{
rotationGesture.view.transform =
CGAffineTransformRotate(rotationGesture.view.transform, rotationGesture.rotation);
_totalRotation += rotationGesture.rotation;
rotationGesture.rotation =
0;
}
#pragma mark screenEdgePanGesture
- (void)screenEdgePanGesture:(UIButton *)screenBtn
{
[self
recoverImageView:_controView.imageView.gestureRecognizers.firstObject];
[self
removeGestureRecognizer];
UIScreenEdgePanGestureRecognizer *screenEdgePanGesture = [[UIScreenEdgePanGestureRecognizer
alloc] initWithTarget:self
action:@selector(handleScreenEdgePanGesture:)];
screenEdgePanGesture.edges =
UIRectEdgeLeft;
[self.view
addGestureRecognizer:screenEdgePanGesture];
[screenEdgePanGesture
release];
}
- (void)handleScreenEdgePanGesture:(UIScreenEdgePanGestureRecognizer *)screenEdgePanGesture
{
_controView.imageView.animationImages =
_controView.animationSunFlowerImages1;
[_controView.imageView
startAnimating];
}
//还原视图
- (void)recoverImageView:(UIGestureRecognizer *)gesture
{
if ([gesture respondsToSelector:@selector(setTranslation:inView:)]) {
_controView.imageView.frame =
CGRectMake(60,
90, 200, 320);
}else
if ([gesture respondsToSelector:@selector(setRotation:)]){
UIRotationGestureRecognizer *tempGesture = (UIRotationGestureRecognizer *)gesture;
tempGesture.view.transform =
CGAffineTransformRotate(tempGesture.view.transform, -_totalRotation);
_totalRotation = 0;
}else
if ([gesture respondsToSelector:@selector(setScale:)]){
_controView.imageView.frame =
CGRectMake(60,
90, 200, 320);
}
self.view.frame = [UIScreen
mainScreen].bounds;
}
//移除手势
- (void)removeGestureRecognizer
{
for (UIGestureRecognizer *gesture
in _controView.imageView.gestureRecognizers) {
[_controView.imageView
removeGestureRecognizer:gesture];
}
}
- (void)changeAnimation:(UIButton *)btn
{
switch (btn.tag) {
case 200:
[self
startAnimating:btn];
break;
case 201:
[self
stopAnimating:btn];
break;
default:
break;
}
}
//开始播放动态图片.开始跑
- (void)startAnimating:(UIButton *)startBtn
{
_controView.imageView.animationImages =
_controView.animationZombieImages;
[_controView.imageView
startAnimating];
}
//结束动画
- (void)stopAnimating:(UIButton *)stopBtn
{
[_controView.imageView
stopAnimating];
}
- (void)viewDidLoad
{
[super
viewDidLoad];
// Do any additional setup after loading the view.
}
- (void)didReceiveMemoryWarning
{
[super
didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
/*
#pragma mark - Navigation
// In a storyboard-based application, you will often want to do a little preparation before navigation
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
// Get the new view controller using [segue destinationViewController].
// Pass the selected object to the new view controller.
}
*/
@end
相关文章推荐
- iOS开发UI基础—24使用纯代码自定义UItableviewcell实现一个简单的微博界面布局
- Android UI开发: 横向ListView(HorizontalListView)及一个简单相册的完整实现
- Android UI开发: 横向ListView(HorizontalListView)及一个简单相册的完整实现 (附源码下载)
- Android UI开发: 横向ListView(HorizontalListView)及一个简单相册的完整实现 (附源码下载)
- Android UI开发: 横向ListView(HorizontalListView)及一个简单相册的完整实现 (附源码下载)
- Angular+Angular-Ui实现分页(代码更加简单,更加容易懂哦)
- Android UI开发: 横向ListView(HorizontalListView)及一个简单相册的完整实现 (附源码下载)
- 【UI基础】手势解锁简单实现
- Android UI开发: 横向ListView(HorizontalListView)及一个简单相册的完整实现 (附源码下载)
- Android UI开发: 横向ListView(HorizontalListView)及一个简单相册的完整实现 (附源码下载)
- [转]Android UI开发: 横向ListView(HorizontalListView)及一个简单相册的完整实现
- Android UI开发: 横向ListView(HorizontalListView)及一个简单相册的完整实现 (附源码下载)
- Android UI开发: 横向ListView(HorizontalListView)及一个简单相册的完整实现 (附源码下载)
- Android UI开发: 横向ListView(HorizontalListView)及一个简单相册的完整实现 (附源码下载)
- jsb 实现简单的读取ui,ui里的动画,button按钮事件,执行动画代码
- Android UI开发: 横向ListView(HorizontalListView)及一个简单相册的完整实现 (附源码下载)
- 利用Angular+Angular-Ui实现分页(代码加简单)
- Android UI开发: 横向ListView(HorizontalListView)及一个简单相册的完整实现 (附源码下载)
- Android UI开发: 横向ListView(HorizontalListView)及一个简单相册的完整实现 (附源码下载)
- iOS开发之UI基础--纯代码自定义UItableviewcell实现一个简单的微博界面布局