私は奇妙な問題に陥っています。タッチ時にキーのハイライトを描画する必要があるキーボード拡張機能を作成しています。私はそれをうまく行うことができますが、奇妙なことに、左上隅のいくつかのキー、特にキーQとAでは、毎回ハイライトを描画しません。主に私のコードは次のようになります..
- オン
touchbegan
- 呼び出してハイライトを描画[keysLayer setNeedsDisplay];
- オン
touchEnd
- もう一度呼び出してハイライトを削除します[keysLayer setNeedsDisplay];
したがって、基本的に、drawRect
関数はこれらの特定のキーで毎回呼び出されるわけではなく、他のすべてが正常に機能し、呼び出されることさえありsetNeedsDisplay
ます。
だから、私は助けを探しています.drawRect関数の呼び出しに失敗する可能性があります.理由のリストを知りたいです.
誰かが私を助けることができれば。
アップデート
コードの追加
KeysLayer ビューが追加された SuperView 内。
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
[super touchesBegan:touches withEvent:event];
keysLayer.drawHighlight=YES;
keysLayer.touchLocation=[touch locationInView:self];
[keysLayer setNeedsDisplay];
}
-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
[super touchesEnded:touches withEvent:event];
keysLayer.drawHighlight=NO;
[keysLayer setNeedsDisplay];
}
KeysLayer UIView クラス内
- (void)setTouchLocation:(CGPoint)location{
self.touchLocation=location;
bezierPathForHighlight=[self createHighLightPath];//Creating simple path based on touch location.
}
- (void)drawRect:(CGRect)rect {
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSaveGState(context);
if(!self.drawHighlight)
[bezierPathForHighlight removeAllPoints];
[bezierPathForHighlight stroke];
CGContextRestoreGState(context);
}
更新 2
そのため、 iOS9.0を搭載したiPhone6でのみ発生する問題を発見しました。このテスト アプリケーションでこれを検証します。このテスト アプリケーションで驚くべきことに、iOS がdrawRectをiOS バグと呼ばない特定のタッチ領域があることがわかりました。
下の添付画像を参照してください。実際に発生する場所を説明しています。解決策のない問題があります。助けが必要。
ありがとう。