在imageView依次加入7个手势, 1.点击哪个button,往imageView上加入哪个手势.(保证视图上仅仅有一个手势). 2.轻拍:点击视图切换美女图片.(imageView上首先展示的美女

//
//  ControlView.h
//  HomeworkGestureRecognizer
//
//  Created by lanouhn on 14-8-27.
//  Copyright (c) 2014年 [email protected] 陈聪雷. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface ControlView : UIView
@property (nonatomic, retain) NSMutableArray *gestureBtnArr;//存储控制手势切换的按钮
@property (nonatomic, retain) NSMutableArray *animationImages;
@property (nonatomic, retain) NSMutableArray *animationImages1;
@property (nonatomic, retain) UIImageView *imageView;
@property (nonatomic, retain) UIButton *startBtn;//開始播放动画按钮
@property (nonatomic, retain) UIButton *stopBtn;//停止播放动画按钮
@end
//
//  ControlView.m
//  HomeworkGestureRecognizer
//
//  Created by lanouhn on 14-8-27.
//  Copyright (c) 2014年 [email protected] 陈聪雷. All rights reserved.
//

#import "ControlView.h"

@implementation ControlView

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        // Initialization code
        self.gestureBtnArr = [NSMutableArray array];
        [self setupControlBtnView];
        [self setupImageView];
        [self setupControlAniBtnView];
    }
    return self;
}

- (void)setupControlBtnView
{
    CGFloat x = 10;
    NSArray *titleArr = @[@"轻拍", @"长按", @"轻扫", @"平移", @"旋转", @"捏合", @"边缘"];
    for (int i = 0; i < 7; i++) {
        UIButton *gestureBtn = [UIButton buttonWithType:UIButtonTypeSystem];
        [gestureBtn setTitle:titleArr[i] forState:UIControlStateNormal];
        [gestureBtn setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
        gestureBtn.layer.cornerRadius = 5;
        gestureBtn.frame = CGRectMake(x, 50, 40, 30);
        gestureBtn.tag = 100 + i;
        gestureBtn.backgroundColor = [UIColor orangeColor];
        [self addSubview:gestureBtn];
        [self.gestureBtnArr addObject:gestureBtn];
        x += 43;
    }
}

- (void)setupImageView
{
    self.animationImages = [NSMutableArray array];
    for (int i = 0; i < 22; i++) {
        UIImage *image = [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:[NSString stringWithFormat:@"Zombie%d", i + 1] ofType:@"tiff"]];
        [_animationImages addObject:image];
    }

    self.animationImages1 = [NSMutableArray array];
    for (int i = 0; i < 18; i++) {
        UIImage *image = [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:[NSString stringWithFormat:@"SunFlower_%d", i + 1] ofType:@"tiff"]];
        [_animationImages1 addObject:image];
    }

    self.imageView = [[UIImageView alloc] initWithImage:[UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"girl_1" ofType:@"jpg"]]];
    _imageView.userInteractionEnabled = YES;
    _imageView.frame = CGRectMake(40, 100, 240, 368);
    _imageView.backgroundColor = [UIColor orangeColor];
//    _imageView.animationImages = _animationImages;
    _imageView.animationDuration = 1;
    [self addSubview:_imageView];
}

- (void)setupControlAniBtnView
{
    self.startBtn = [UIButton buttonWithType:UIButtonTypeSystem];
    _startBtn.backgroundColor = [UIColor orangeColor];
    _startBtn.layer.cornerRadius = 5;
    _startBtn.frame = CGRectMake(40, 488, 110, 30);
    [_startBtn setTitle:@"開始动画" forState:UIControlStateNormal];
    [_startBtn setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
    [self addSubview:_startBtn];

    self.stopBtn = [UIButton buttonWithType:UIButtonTypeSystem];
    _stopBtn.backgroundColor = [UIColor orangeColor];
    _stopBtn.layer.cornerRadius = 5;
    _stopBtn.frame = CGRectMake(170, 488, 110, 30);
    [_stopBtn setTitle:@"结束动画" forState:UIControlStateNormal];
    [_stopBtn setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
    [self addSubview:_stopBtn];
}

- (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
//
//  RootViewController.m
//  HomeworkGestureRecognizer
//
//  Created by lanouhn on 14-8-27.
//  Copyright (c) 2014年 [email protected] 陈聪雷. All rights reserved.
//

#import "RootViewController.h"
#import "ControlView.h"
@interface RootViewController ()
{
    ControlView *_controlView;
    CGFloat _totalRotaion;
}
@end

@implementation RootViewController

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
    }
    return self;
}

- (void)loadView
{
    _controlView = [[ControlView alloc] init];
    _controlView.backgroundColor = [UIColor grayColor];
    self.view = _controlView;
    [_controlView release];

    //给button加入点击事件
    for (UIButton *btn in _controlView.gestureBtnArr) {
        [btn addTarget:self action:@selector(changeGesture:) forControlEvents:UIControlEventTouchUpInside];
    }
    [_controlView.startBtn addTarget:self action:@selector(startAni:) forControlEvents:UIControlEventTouchUpInside];
    [_controlView.stopBtn addTarget:self action:@selector(stopAni:) forControlEvents:UIControlEventTouchUpInside];

}

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view.

}

- (void)changeGesture:(UIButton *)btn
{
    switch (btn.tag) {
        case 100:
            [self setupTapGesture:btn];
            break;
        case 101:
            [self setupLongPressGesture:btn];
            break;
        case 102:
            [self setupSwipeGesture:btn];
            break;
        case 103:
            [self setupPanGesture:btn];
            break;
        case 104:
            [self setupRotationGesture:btn];
            break;
        case 105:
            [self setupPinchGesture:btn];
            break;
        case 106:
            [self setupScreenEdgePanGesture:btn];
            break;
        default:
            break;
    }
}

//创建轻拍手势
- (void)setupTapGesture:(UIButton *)btn
{
    [self recoverImageView:_controlView.imageView.gestureRecognizers.firstObject];
    [self removeGestureRecognizer];
    UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTapGesture:)];
    [_controlView.imageView addGestureRecognizer:tapGesture];
    [tapGesture release];
}

//处理轻拍事件
- (void)handleTapGesture:(UITapGestureRecognizer *)tapGesture
{
    NSLog(@"%s", __FUNCTION__);
    static int i = 2;
    _controlView.imageView.image = [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:[NSString stringWithFormat:@"girl_%d", i] ofType:@"jpg"]];
    i++;
    if (6 == i) {
        i = 1;
    }
}

//创建长按手势
- (void)setupLongPressGesture:(UIButton *)btn
{
    [self recoverImageView:_controlView.imageView.gestureRecognizers.firstObject];
    [self removeGestureRecognizer];
    UILongPressGestureRecognizer *longPressGesture = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(handleLongPressGesture:)];
    [_controlView.imageView addGestureRecognizer:longPressGesture];
    [longPressGesture release];
}

//处理长按事件
- (void)handleLongPressGesture:(UILongPressGestureRecognizer *)longPressGesture
{
    UIImageWriteToSavedPhotosAlbum(_controlView.imageView.image, nil, nil, nil);
    if (UIGestureRecognizerStateBegan == longPressGesture.state) {
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"提示" message:@"存储图片成功" delegate:self cancelButtonTitle:nil otherButtonTitles:@"OK", nil];
        [alert show];
        [alert release];
    }
}

//创建轻扫手势
- (void)setupSwipeGesture:(UIButton *)btn
{
    [self recoverImageView:_controlView.imageView.gestureRecognizers.firstObject];
    [self removeGestureRecognizer];
    _controlView.imageView.image = [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"boy_1" ofType:@"jpg"]];
    UISwipeGestureRecognizer *swipeGesture = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleSwipeGesture:)];
    swipeGesture.direction = UISwipeGestureRecognizerDirectionLeft | UISwipeGestureRecognizerDirectionRight;
    [_controlView.imageView addGestureRecognizer:swipeGesture];
    [swipeGesture release];
}

//处理轻扫事件
- (void)handleSwipeGesture:(UISwipeGestureRecognizer *)swipeGesture
{
    static int i = 1;
    if (swipeGesture.direction == 2) {
        i++;
        if (6 == i) {
            i = 1;
        }
        _controlView.imageView.image = [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:[NSString stringWithFormat:@"boy_%d", i] ofType:@"jpg"]];
    } else if (swipeGesture.direction == 3) {
        i--;
        if (0 == i) {
            i = 5;
        }
        _controlView.imageView.image = [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:[NSString stringWithFormat:@"boy_%d", i] ofType:@"jpg"]];
    }
}

//创建平移手势
- (void)setupPanGesture:(UIButton *)btn
{
    [self recoverImageView:_controlView.imageView.gestureRecognizers.firstObject];
    [self removeGestureRecognizer];
    UIPanGestureRecognizer *panGesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePanGesture:)];
    [_controlView.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];
}

//创建旋转手势
- (void)setupRotationGesture:(UIButton *)btn
{
    [self recoverImageView:_controlView.imageView.gestureRecognizers.firstObject];
    [self removeGestureRecognizer];
    UIRotationGestureRecognizer *rotationGesture = [[UIRotationGestureRecognizer alloc] initWithTarget:self action:@selector(handleRotationGesture:)];
    [_controlView.imageView addGestureRecognizer:rotationGesture];
    [rotationGesture release];
}

//处理旋转事件
- (void)handleRotationGesture:(UIRotationGestureRecognizer *)rotationGesture
{
    rotationGesture.view.transform = CGAffineTransformRotate(rotationGesture.view.transform, rotationGesture.rotation);
    NSLog(@"%f", rotationGesture.rotation);
    _totalRotaion += rotationGesture.rotation;

    rotationGesture.rotation = 0;
}

//创建捏合手势
- (void)setupPinchGesture:(UIButton *)btn
{
    [self recoverImageView:_controlView.imageView.gestureRecognizers.firstObject];
    [self removeGestureRecognizer];
    UIPinchGestureRecognizer *pinchGesture = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(handlePinchGesture:)];
    [_controlView.imageView addGestureRecognizer:pinchGesture];
    [pinchGesture release];
}

//处理捏合事件
- (void)handlePinchGesture:(UIPinchGestureRecognizer *)pinchGesture
{
    pinchGesture.view.transform = CGAffineTransformScale(pinchGesture.view.transform, pinchGesture.scale, pinchGesture.scale);
    pinchGesture.scale = 1.0;
}

//创建边缘手势
- (void)setupScreenEdgePanGesture:(UIButton *)btn
{
    [self recoverImageView:_controlView.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
{
    _controlView.imageView.animationImages = _controlView.animationImages1;
    [_controlView.imageView startAnimating];
}

//还原视图
- (void)recoverImageView:(UIGestureRecognizer *)gesture
{
    if ([gesture respondsToSelector:@selector(setTranslation:inView:)]) {
        _controlView.imageView.frame = CGRectMake(40, 100, 240, 368);
    } else if ([gesture respondsToSelector:@selector(setRotation:)]) {
        UIRotationGestureRecognizer *tempGesture = (UIRotationGestureRecognizer *)gesture;
        tempGesture.view.transform = CGAffineTransformRotate(tempGesture.view.transform, -_totalRotaion);
        _totalRotaion = 0;
    } else if ([gesture respondsToSelector:@selector(setScale:)]) {
        _controlView.imageView.frame = CGRectMake(40, 100, 240, 368);
    }
    self.view.frame = [UIScreen mainScreen].bounds;
}

//移除手势
- (void)removeGestureRecognizer
{
    for (UIGestureRecognizer *gesture in _controlView.imageView.gestureRecognizers) {
        [_controlView.imageView removeGestureRecognizer:gesture];
    }
}

- (void)startAni:(UIButton *)btn
{
    _controlView.imageView.animationImages = _controlView.animationImages;
    [_controlView.imageView startAnimating];
}

- (void)stopAni:(UIButton *)btn
{
    [_controlView.imageView stopAnimating];

}

- (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
//
//  CLAppDelegate.m
//  HomeworkGestureRecognizer
//
//  Created by lanouhn on 14-8-27.
//  Copyright (c) 2014年 [email protected] 陈聪雷. All rights reserved.
//

#import "CLAppDelegate.h"
#import "RootViewController.h"
@implementation CLAppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    // Override point for customization after application launch.
    RootViewController *rootVC = [[RootViewController alloc] init];
    self.window.rootViewController = rootVC;
    [rootVC release];
    self.window.backgroundColor = [UIColor whiteColor];
    [self.window makeKeyAndVisible];
    return YES;
}

- (void)applicationWillResignActive:(UIApplication *)application
{
    // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.
    // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game.
}

- (void)applicationDidEnterBackground:(UIApplication *)application
{
    // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later.
    // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.
}

- (void)applicationWillEnterForeground:(UIApplication *)application
{
    // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background.
}

- (void)applicationDidBecomeActive:(UIApplication *)application
{
    // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
}

- (void)applicationWillTerminate:(UIApplication *)application
{
    // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
}

- (void)dealloc
{
    self.window = nil;
    [super dealloc];
}

@end
时间: 2024-08-02 05:00:02

在imageView依次加入7个手势, 1.点击哪个button,往imageView上加入哪个手势.(保证视图上仅仅有一个手势). 2.轻拍:点击视图切换美女图片.(imageView上首先展示的美女的相关文章

手势,轻拍(tapGesture)+轻扫(swipeGesture)

在iOS开发时我们经常用到手势,手势有很多种,先介绍两种一个轻拍(UITapGestureRecognizer)还有一个轻扫(UISwipeGestureRecognizer). 一,轻拍(UITapGestureRecognizer) 我们给图片或者一个视图添加一个点击事件,一般都用UITapGestureRecognizer,因为手势有个属性view,可以获取当前手势下的视图,运用起来非常灵活,所以我比较习惯用轻拍手势,有时候我们会纠结该用轻拍手势还是按钮,其实两者之间做选择最好的方法就是我

用python来抓取“煎蛋网”上面的美女图片,尺度很大哦!哈哈

废话不多说,先上代码: import urllib.request import re #获得当前页面的页数page_name def get_pagenum(url): req = urllib.request.Request(url) req.add_header('User-Agent','Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safar

Scrapy爬取美女图片第三集 代理ip(上) (原创)

首先说一声,让大家久等了.本来打算520那天进行更新的,可是一细想,也只有我这样的单身狗还在做科研,大家可能没心思看更新的文章,所以就拖到了今天.不过忙了521,522这一天半,我把数据库也添加进来了,修复了一些bug(现在肯定有人会说果然是单身狗). 好了,废话不多说,咱们进入今天的主题.上两篇 Scrapy爬取美女图片 的文章,咱们讲解了scrapy的用法.可是就在最近,有热心的朋友对我说之前的程序无法爬取到图片,我猜应该是煎蛋网加入了反爬虫机制.所以今天讲解的就是突破反爬虫机制的上篇 代理

美女图片采集器 (源码+解析)

前言: 有一段时间没写博客了, "持之以恒"徽章都暗了, 实在不该. 前一段确实比较忙, ...小小地给自己的懒找个借口吧. 大二即将结束, 学习iOS也有一段时间了.今天抽点时间, 开源一个前几天刚上传的App里面的一个功能, RT, 美女图片采集器.   美女.. 相信没有人不喜欢吧, 基于此, 这个小Demo应运而生. 效果演示: 看到这里, 如果还有兴趣学习的话, 可以先到我的git中下载源码, 然后配合着源码看我下面的解析.相信, 会让你有所收获的. git下载链接: Bea

美女图片採集器 (源代码+解析)

前言: 有一段时间没写博客了, "持之以恒"徽章都暗了, 实在不该. 前一段确实比較忙, ...小小地给自己的懒找个借口吧. 大二即将结束, 学习iOS也有一段时间了.今天抽点时间, 开源一个前几天刚上传的App里面的一个功能, RT, 美女图片採集器. ? 美女.. 相信没有人不喜欢吧, 基于此, 这个小Demo应运而生. 注:? 本文正在參加博客大赛. 假设认为对你有所帮助, 还望帮忙投下票. 多谢. ? 投票链接:?http://vote.blog.csdn.net/Articl

利用Nodejs &amp; Cheerio &amp; Request抓取Lofter美女图片

还是参考了这篇文章: http://cnodejs.org/topic/54bdaac4514ea9146862abee 另外有上面文章 nodejs抓取网易公开课的一些经验. 代码如下,注意其中用到了 http获取网页结果,request进行http请求,cheerio进行解析,mkdirp创建目录,fs创建文件,iconv-lite进行格式转换(此例非必须). curl.js: /** * Created by baidu on 16/10/17. */ var http = require

Python实战:美女图片下载器,海量图片任你下载

Python应用现在如火如荼,应用范围很广.因其效率高开发迅速的优势,快速进入编程语言排行榜前几名.本系列文章致力于可以全面系统的介绍Python语言开发知识和相关知识总结.希望大家能够快速入门并学习Python这门语言. 本文是在前一部分Python基础之上Python实战:Python爬虫学习教程,获取电影排行榜,再次升级的Python网页爬虫实战课程. 1.项目概述. 利用XPath和requests模块进行网页抓取与分析,达到网页图片下载的效果. 抓爬图片地址:http://www.2c

Scrapy爬取美女图片续集 (原创)

上一篇咱们讲解了Scrapy的工作机制和如何使用Scrapy爬取美女图片,而今天接着讲解Scrapy爬取美女图片,不过采取了不同的方式和代码实现,对Scrapy的功能进行更深入的运用. 在学习Scrapy官方文档的过程中,发现Scrapy自身实现了图片和文件的下载功能,不需要咱们之前自己实现图片的下载(不过原理都一样). 在官方文档中,我们可以看到下面一些话:Scrapy为下载item中包含的文件(比如在爬取到产品时,同时也想保存对应的图片)提供了一个可重用的 item pipelines .

自己动手写美女图片下载器

前言:看到标题可能会有人觉得似曾相识,没错,这篇博文的来源正是根据杨中科老师的<百度美女图片下载器开发教程.Net版>.因为我也观看了该教程,觉得很好玩,于是乎想自己独立完成一次,作为对之前基础学习内容的回顾和运用.以博文的形式和大家分享整个开发过程主要是想借此机会来重新整理下思路.锻炼下自己的表达能力.您如果对下面要用到知识点很熟悉,可忽略此文. 一.主要技术 Winform常用控件的基本使用 HttpWebRequest请求其他网站内容 Newtonsoft.Json.dll组件解析JSO