按钮在执行frame动画的时候怎么响应触发事件?
生活随笔
收集整理的這篇文章主要介紹了
按钮在执行frame动画的时候怎么响应触发事件?
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
按鈕在執行frame動畫的時候怎么響應觸發事件?
代碼中效果(請注意,我并沒有點擊到按鈕,而是點擊到按鈕的終點frame值處):
對應的代碼:
// // ViewController.m // TapButton // // Created by YouXianMing on 14/12/7. // Copyright (c) 2014年 YouXianMing. All rights reserved. // #import "ViewController.h"@interface ViewController ()@end@implementation ViewController- (void)viewDidLoad {[super viewDidLoad];// 初始化按鈕UIButton *button = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];button.backgroundColor = [UIColor redColor];[button addTarget:selfaction:@selector(buttonEvent:)forControlEvents:UIControlEventTouchUpInside];[self.view addSubview:button];// 執行動畫[UIView animateWithDuration:10.fdelay:0options:UIViewAnimationOptionCurveLinear | UIViewAnimationOptionAllowUserInteractionanimations:^{button.frame = CGRectMake(0, 468, 100, 100);} completion:^(BOOL finished) {}]; }/*** 按鈕事件** @param button 按鈕事件*/ - (void)buttonEvent:(UIButton *)button {NSLog(@"YouXianMing"); }@end修改過后的效果:
源碼:
// // ViewController.m // TapButton // // Created by YouXianMing on 14/12/7. // Copyright (c) 2014年 YouXianMing. All rights reserved. // #import "ViewController.h" #import "ChildView.h"@interface ViewController (){ChildView *tmpView;}@end@implementation ViewController- (void)viewDidLoad {[super viewDidLoad];// 初始化按鈕tmpView = [[ChildView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];tmpView.backgroundColor = [UIColor redColor];tmpView.userInteractionEnabled = NO; // 讓self.view獲取點擊事件(穿透自身) [self.view addSubview:tmpView];// 執行動畫[UIView animateWithDuration:10.fdelay:0options:UIViewAnimationOptionCurveLinear | UIViewAnimationOptionAllowUserInteractionanimations:^{tmpView.frame = CGRectMake(0, 468, 100, 100);} completion:^(BOOL finished) {}]; }- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {// 獲取點擊點CGPoint point = [[touches anyObject] locationInView:self.view];// 獲取tmpView的layer當前的位置CGPoint presentationPosition = [[tmpView.layer presentationLayer] position];// 判斷位置,讓tmpView接受點擊事件if (point.x > presentationPosition.x - 50 && point.x < presentationPosition.x + 50 &&point.y > presentationPosition.y - 50 && point.y < presentationPosition.y + 50) {[tmpView touchesBegan:touches withEvent:event];} }@endChildView.h 與?ChildView.m
// // ChildView.h // TapButton // // Created by YouXianMing on 14/12/7. // Copyright (c) 2014年 YouXianMing. All rights reserved. // #import <UIKit/UIKit.h>@interface ChildView : UIView@end // // ChildView.m // TapButton // // Created by YouXianMing on 14/12/7. // Copyright (c) 2014年 YouXianMing. All rights reserved. // #import "ChildView.h"@implementation ChildView- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {NSLog(@"獲取點擊事件"); }@end關鍵性的兩步:
?
轉載于:https://www.cnblogs.com/YouXianMing/p/4149103.html
總結
以上是生活随笔為你收集整理的按钮在执行frame动画的时候怎么响应触发事件?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《C++ Primer Plus 6th
- 下一篇: (转)✈工欲善其事,必先利其器✔™