お久しぶりの投稿です。江原です。
入社させていただいて半年
日々すばらしい経験をさせていただいて本当に感謝しています!
一日も早くもっと戦力になれればと
頑張って行きたいと思います。
今日はUIViewとタップイベントについて調べてみたいと思います。
まず。。。
透明(又は半透明)のUIViewの後ろに
ボタンを配置して押下させたいとき

↑う~んやはり、UIButtonは押せません。
手前のUIViewがイベントを処理した為です。
そこでUIViewのuserInteractionEnabledをNOにして
タップイベントを無視すると
背景のUIButtonにイベントを透過する事が出来ます。
でもこの方法ですと
透過した手前のUIViewにUIButtonを配置した場合に
↑UIView上のボタンがタップできません。。
親のViewがuserInteractionEnabled=NOだと
その上に配置されるview(subView)は押下イベントが発生しないようです。
そこでuserInteractionEnabledをYESにて
subviewのイベントを発生させつつ
自身のUIViewのイベントのみを透過させる方法を調べました。
// HitTestView.h
// UIViewを継承して自身のみ透過させ
// サブビューのイベントは破棄しないViewを作る
#import <UIKit/UIKit.h>
@interface HitTestView : UIView
@end
// HitTestView.m
#import "HitTestView.h"
@implementation HitTestView
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
}
return self;
}
- (UIView*)hitTest:(CGPoint)point withEvent:(UIEvent *)event
{
// 現在イベントが発生しているViewを取得
UIView *nowHitView = [super hitTest:point withEvent:event];
// 自分自身(UIView)だったら透過して(nilを返すとイベントを取得しなくなる)
if ( self == nowHitView )
{
return nil;
}
// それ意外だったらイベント発生させる
return nowHitView;
}
@end
こんな感じでUIViewのhitTestをオーバライドすれば
背景と自身の上に存在するUIButtonが押下できるみたいですね。
- 関連記事
-
スポンサーサイト
trackbackURL:http://appteam.blog114.fc2.com/tb.php/228-b4b254d0