SlideShare uma empresa Scribd logo
1 de 26
Baixar para ler offline
potatotips
UIToolbarの同時タッチを防ぐ
デンソーアイティーラボラトリ
@sonson_twit 吉田悠一
本業
自己紹介
sonsongithubで検索
2tchのモジュールをOSSに
• UZMultipleLayeredPopoverController
• UZTextView
• UZInputCandidateAccessory
コードの保守性を高めるために
• モジュールを切り出して公開する
本日のお題
@sonson_twit
http://sonson.jp
まずはこの症状をご覧ください
問題点
• 同時入力できてしまう
• ツールバーのボタン
• UINav.Con.のジェスチャ
!
• UIViewControllerの階層構造が壊れる
• MobileSafariはロックして回避しているようだ
対策案
• UIBarButtonItemに対策を施す
• exclusiveTouch?
• UIBarButtonItemからdownとupを奪う
exclusiveTouch
• 役立たず
• だが,ツールバー上のボタン二つ同時押しは
避けることができた
/**!
* UIToolbarでボタンふたつの同時押しを防止する.!
**/!
- (void)setExclusiveForUIBarButtonsOnToolbar {!
! for (UIView* view in [self.navigationController.toolbar subviews]) {!
! ! view.exclusiveTouch=YES;!
! }!
}
これもグレーといえば,グレー
UIBarButtonItemのイベント
• タップイベントの横取りが直接できない
• C2ToolbarButton - undocumented class
• viewからswizzlingでタップイベントを奪う
• customにしてUIButtonを内蔵する
• UIToolbarにジェスチャをつける
Undocumented API
• ダメですわ・・・・
Swizzling
• え・・・そんなんやりたくないです
• 昔,リジェクトされたし・・・・
UIButton in UIBarButtonItem
• え・・・汎用性なくなりますよ
• Storyboardのボタンを全部作り替えるとか
• 難のためにそんなアホなことを
• 嫌です
/**!
* UIButtonをUIBarButtonItemにセット!
* addTergetで触ったタイミングを検出・・・!
**/!
UIButton *insideButton = [UIButton
buttonWithType:UIButtonTypeCustom];!
insideButton.bounds = CGRectMake(0, 0, 44, 44);!
[insideButton setImage:[UIImage imageNamed:@"hoge.png"]
forState:UIControlStateNormal];!
UIBarButtonItem *item = [[UIBarButtonItem alloc]
initWithCustomView:insideButton];
ないわー,絶対ないわー!
Storyboardとか使えないですやん
UIToolbarにジェスチャ
• UIGestureRecognizerのサブクラスを実装
• touchesBegin
• touchesCancelled, touchesEnded
• ジェスチャは失敗させる
• UINavigationControllerにコールバック
• interactiveGestureRecognizer.enable
- (void)viewDidLoad {!
[super viewDidLoad];!
! C2ToolbarTapGestureRecognizer* tapGesture = !
! ! [[C2ToolbarTapGestureRecognizer alloc] initWithTarget:nil action:nil];!
! tapGesture.dummyDelegate = self;!
! tapGesture.delegate = self;!
! [self.toolbar addGestureRecognizer:tapGesture];!
}
カスタムのGestureRecognizerをUIToolbarにセット.
UINavigationControllerのサブクラスで
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {!
! self.state = UIGestureRecognizerStatePossible;!
! [self.dummyDelegate didBeginDummyTap:self];!
}!
!
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {!
! self.state = UIGestureRecognizerStateFailed;!
! [self.dummyDelegate didEndDummyTap:self];!
}!
!
- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event {!
! self.state = UIGestureRecognizerStateFailed;!
! [self.dummyDelegate didEndDummyTap:self];!
}
タップのダウン・アップを検出し,UINav.に送る
この辺が妥協点か・・・・!
コードも使い回せるし,汎用的だし,書き直しがないし!
!
他にいい方法があったら教えてください.
まとめ
• 自己紹介
• 2tchのモジュール
• ツールバーとジェスチャの衝突を防ぎたい
Thank you.
@sonson_twit
http://sonson.jp
backup slide
backup

Mais conteúdo relacionado

Destaque (14)

Aseemearth
AseemearthAseemearth
Aseemearth
 
ΒΑΚΑΛΟΥΔΗ - ΠΡΟΣΚΛΗΣΗ
ΒΑΚΑΛΟΥΔΗ - ΠΡΟΣΚΛΗΣΗΒΑΚΑΛΟΥΔΗ - ΠΡΟΣΚΛΗΣΗ
ΒΑΚΑΛΟΥΔΗ - ΠΡΟΣΚΛΗΣΗ
 
Snr 2012 ee020344
Snr 2012 ee020344Snr 2012 ee020344
Snr 2012 ee020344
 
מחדד 05.03
מחדד 05.03מחדד 05.03
מחדד 05.03
 
Boletín XVII abril 2016
Boletín XVII abril 2016Boletín XVII abril 2016
Boletín XVII abril 2016
 
Martin Nerstad - VG
Martin Nerstad - VGMartin Nerstad - VG
Martin Nerstad - VG
 
CANENERO Advertising - Gilberto Chiacchiera
CANENERO Advertising - Gilberto ChiacchieraCANENERO Advertising - Gilberto Chiacchiera
CANENERO Advertising - Gilberto Chiacchiera
 
Каталог Wellness
Каталог WellnessКаталог Wellness
Каталог Wellness
 
Creatividad o mal gusto de los japoneses.
Creatividad o mal gusto de los japoneses.Creatividad o mal gusto de los japoneses.
Creatividad o mal gusto de los japoneses.
 
LR KONKURENCIJOS TARYBOS (KT) 2015 m. VEIKLOS ATASKAITA
LR KONKURENCIJOS TARYBOS (KT) 2015 m. VEIKLOS ATASKAITALR KONKURENCIJOS TARYBOS (KT) 2015 m. VEIKLOS ATASKAITA
LR KONKURENCIJOS TARYBOS (KT) 2015 m. VEIKLOS ATASKAITA
 
Hopes, plans and pleasures of children
Hopes, plans and pleasures of childrenHopes, plans and pleasures of children
Hopes, plans and pleasures of children
 
CloudSurance - We backup web application data
CloudSurance - We backup web application dataCloudSurance - We backup web application data
CloudSurance - We backup web application data
 
Il Web E Le Reti Di Vendita
Il Web E Le Reti Di Vendita Il Web E Le Reti Di Vendita
Il Web E Le Reti Di Vendita
 
Js高级技巧
Js高级技巧Js高级技巧
Js高级技巧
 

Mais de Yuichi Yoshida

Swift 2 (& lldb) シンポジウム
Swift 2 (& lldb) シンポジウムSwift 2 (& lldb) シンポジウム
Swift 2 (& lldb) シンポジウムYuichi Yoshida
 
Swift 2 (& lldb) シンポジウム
Swift 2 (& lldb) シンポジウムSwift 2 (& lldb) シンポジウム
Swift 2 (& lldb) シンポジウムYuichi Yoshida
 
Swiftで多層型で戻り値を返すことの是非と雑談
Swiftで多層型で戻り値を返すことの是非と雑談Swiftで多層型で戻り値を返すことの是非と雑談
Swiftで多層型で戻り値を返すことの是非と雑談Yuichi Yoshida
 
Swift - Result<t>型で結果を返すのは邪道か,王道か
Swift - Result<t>型で結果を返すのは邪道か,王道かSwift - Result<t>型で結果を返すのは邪道か,王道か
Swift - Result<t>型で結果を返すのは邪道か,王道かYuichi Yoshida
 
Machine Learning : The high interest credit card of technical debt
Machine Learning : The high interest credit card of technical debt Machine Learning : The high interest credit card of technical debt
Machine Learning : The high interest credit card of technical debt Yuichi Yoshida
 
キーボードアプリとSketchのススメ
キーボードアプリとSketchのススメキーボードアプリとSketchのススメ
キーボードアプリとSketchのススメYuichi Yoshida
 
UZTextView, UZMultilayeredPopoverControllerの解説
UZTextView, UZMultilayeredPopoverControllerの解説UZTextView, UZMultilayeredPopoverControllerの解説
UZTextView, UZMultilayeredPopoverControllerの解説Yuichi Yoshida
 
64bit化してみた話
64bit化してみた話64bit化してみた話
64bit化してみた話Yuichi Yoshida
 

Mais de Yuichi Yoshida (10)

Swift 2 (& lldb) シンポジウム
Swift 2 (& lldb) シンポジウムSwift 2 (& lldb) シンポジウム
Swift 2 (& lldb) シンポジウム
 
Swift 2 (& lldb) シンポジウム
Swift 2 (& lldb) シンポジウムSwift 2 (& lldb) シンポジウム
Swift 2 (& lldb) シンポジウム
 
Swiftで多層型で戻り値を返すことの是非と雑談
Swiftで多層型で戻り値を返すことの是非と雑談Swiftで多層型で戻り値を返すことの是非と雑談
Swiftで多層型で戻り値を返すことの是非と雑談
 
Swift - Result<t>型で結果を返すのは邪道か,王道か
Swift - Result<t>型で結果を返すのは邪道か,王道かSwift - Result<t>型で結果を返すのは邪道か,王道か
Swift - Result<t>型で結果を返すのは邪道か,王道か
 
Machine Learning : The high interest credit card of technical debt
Machine Learning : The high interest credit card of technical debt Machine Learning : The high interest credit card of technical debt
Machine Learning : The high interest credit card of technical debt
 
キーボードアプリとSketchのススメ
キーボードアプリとSketchのススメキーボードアプリとSketchのススメ
キーボードアプリとSketchのススメ
 
Handoff from Safari
Handoff from SafariHandoff from Safari
Handoff from Safari
 
UZTextView, UZMultilayeredPopoverControllerの解説
UZTextView, UZMultilayeredPopoverControllerの解説UZTextView, UZMultilayeredPopoverControllerの解説
UZTextView, UZMultilayeredPopoverControllerの解説
 
64bit化してみた話
64bit化してみた話64bit化してみた話
64bit化してみた話
 
Gitのすすめ
GitのすすめGitのすすめ
Gitのすすめ
 

UIToolbarの同時タッチを防ぐ