appDelegate.m
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
self.window.backgroundColor = [UIColor orangeColor];
ViewController *vc = [[ViewController alloc] init];
UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:vc];
self.window.rootViewController = nav;
return YES;
}
AboveButton.h
//
// AboveButton.h
// LuckyCoderCai_DemoTest
//
// Created by luckyCoderCai on 16/9/21.
// Copyright © 2016年 luckyCoderCai. All rights reserved.
//
#import <UIKit/UIKit.h>
@interface AboveButton : UIButton
@property (nonatomic, strong) UIButton *underBtn;
@end
AboveButton.m
//
// AboveButton.m
// LuckyCoderCai_DemoTest
//
// Created by luckyCoderCai on 16/9/21.
// Copyright © 2016年 luckyCoderCai. All rights reserved.
//
#import "AboveButton.h"
@implementation AboveButton
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
{
//将像素point由point所在视图转换到目标视图view中,返回在目标视图view中的像素值
CGPoint underBtnPoint = [self convertPoint:point toView:_underBtn];
if ([_underBtn pointInside:underBtnPoint withEvent:event]) {
return _underBtn;
}
return [super hitTest:point withEvent:event];
}
@end
ViewController.m
//
// ViewController.m
// LuckyCoderCai_DemoTest
//
// Created by luckyCoderCai on 16/9/14.
// Copyright © 2016年 luckyCoderCai. All rights reserved.
//
#define NSLog(FORMAT, ...) fprintf(stderr, "[%s:%d行] %s\n",[[[NSString stringWithUTF8String:__FILE__] lastPathComponent] UTF8String], __LINE__, [[NSString stringWithFormat:FORMAT, ##__VA_ARGS__] UTF8String]);
#import "ViewController.h"
#import "AboveButton.h"
@interface ViewController ()
@property (nonatomic, strong) AboveButton *aboveBtn;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
self.title = @"DemoTest";
self.view.backgroundColor = [UIColor orangeColor];
[self hitTest];
}
- (void)hitTest
{
UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
btn.backgroundColor = [UIColor purpleColor];
[btn setTitle:@"under" forState:UIControlStateNormal];
btn.frame = CGRectMake(100, 100, 200, 100);
[self.view addSubview:btn];
[btn addTarget:self action:@selector(underBtnAction) forControlEvents:UIControlEventTouchUpInside];
self.aboveBtn = [AboveButton buttonWithType:UIButtonTypeCustom];
self.aboveBtn.frame = CGRectMake(220, 160, 200, 100);
[self.aboveBtn setTitle:@"above" forState:UIControlStateNormal];
self.aboveBtn.backgroundColor = [UIColor cyanColor];
[self.view addSubview:self.aboveBtn];
[self.aboveBtn addTarget:self action:@selector(aboveBtnAction) forControlEvents:UIControlEventTouchUpInside];
self.aboveBtn.underBtn = btn;
}
- (void)aboveBtnAction
{
NSLog(@"--aboveBtn");
}
- (void)underBtnAction
{
NSLog(@"---underBtn");
}
@end
Gif: