zoukankan      html  css  js  c++  java
  • 屏蔽响应事件继续向父视图传递的category

    屏蔽响应事件继续向父视图传递的category

    这篇教程是上一篇教程的升级版,将复杂的代码封装成了category,更便于使用:)

    效果:

    源码:

    UIGestureRecognizer+EnvetInCurrentView.h 与 UIGestureRecognizer+EnvetInCurrentView.m

    //
    //  UIGestureRecognizer+EnvetInCurrentView.h
    //  BackgroundView
    //
    //  Created by YouXianMing on 14-10-3.
    //  Copyright (c) 2014年 YouXianMing. All rights reserved.
    //
    
    #import <UIKit/UIKit.h>
    
    typedef void (^CurrentViewBlock)(UIGestureRecognizer *gesture);
    typedef void (^OtherViewBlock)(UIGestureRecognizer *gesture);
    
    @interface UIGestureRecognizer (EnvetInCurrentView)
    
    - (void)eventInCurrentView:(CurrentViewBlock)currentViewBlock
                   inOtherView:(OtherViewBlock)otherViewBlock;
    
    @end
    //
    //  UIGestureRecognizer+EnvetInCurrentView.m
    //  BackgroundView
    //
    //  Created by YouXianMing on 14-10-3.
    //  Copyright (c) 2014年 YouXianMing. All rights reserved.
    //
    
    #import "UIGestureRecognizer+EnvetInCurrentView.h"
    
    @implementation UIGestureRecognizer (EnvetInCurrentView)
    
    - (void)eventInCurrentView:(CurrentViewBlock)currentViewBlock
                   inOtherView:(OtherViewBlock)otherViewBlock
    {
        UIEvent *event = [[UIEvent alloc] init];
        CGPoint location = [self locationInView:self.view];
        
        //check actually view you hit via hitTest
        UIView *view = [self.view hitTest:location withEvent:event];
        
        if ([view.gestureRecognizers containsObject:self]) {
            currentViewBlock(self);
        } else {
            otherViewBlock(self);
        }
    }
    
    @end

    使用时候的源码:

    //
    //  ViewController.m
    //  BackgroundView
    //
    //  Created by YouXianMing on 14-10-3.
    //  Copyright (c) 2014年 YouXianMing. All rights reserved.
    //
    
    #import "ViewController.h"
    #import "UIView+BackgroundView.h"
    #import "UIGestureRecognizer+EnvetInCurrentView.h"
    
    @interface ViewController ()
    
    @end
    
    @implementation ViewController
    
    - (void)viewDidLoad {
        [super viewDidLoad];
    
        // 添加手势
        UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self
                                                                              action:@selector(handleSingleTap:)];
        [self.view addGestureRecognizer:tap];
        
        UILabel *label      = [[UILabel alloc] initWithFrame:self.view.bounds];
        label.text          = @"Y.X. Touch Test";
        label.textAlignment = NSTextAlignmentCenter;
        label.font          = [UIFont fontWithName:@"HelveticaNeue-Thin" size:40.f];
        label.textColor     = [UIColor redColor];
        [self.view addSubview:label];
    }
    
    - (void)handleSingleTap:(UIGestureRecognizer *)gestureRecognizer
    {
        [gestureRecognizer eventInCurrentView:^(UIGestureRecognizer *gesture) {
            NSLog(@"当前视图事件");
            // 显示
            [self.view showBackgroundViewAndConfig:^(BackgroundView *configView) {
                configView.backgroundColor = [[UIColor blackColor] colorWithAlphaComponent:0.6];
                configView.startDuration = 0.4f;
                configView.endDuration   = 0.4f;
            }];
            
            // 延迟3s执行
            [self performSelector:@selector(affterDelay)
                       withObject:nil
                       afterDelay:3.f];
        } inOtherView:^(UIGestureRecognizer *gesture) {
            NSLog(@"其他视图的事件");
        }];
    }
    
    
    - (void)affterDelay
    {
        // 隐藏
        [self.view removeBackgroundView];
    }
    
    @end

    以下是需要注意的地方:

  • 相关阅读:
    NFS服务
    rsync
    jquery animate
    一个简单的widget
    EXTJS学习(一)
    jquery+linq制作博客(二)
    EXTJS学习(二)Message
    Jquery ui widget中的_create(),_init(),destroy()
    Jquery ui widget开发
    Json.net简单用法
  • 原文地址:https://www.cnblogs.com/YouXianMing/p/4004738.html
Copyright © 2011-2022 走看看