あるべきではない小さな問題があります... iOS 用のユニバーサル アプリを作成していますが、iPad では起動するが iPhone では起動しない UITapGestureRecognizer に問題があります。
更新開始
iPad のペン先を iPhone に押し付けたところ、うまくいきました。両方のペン先に UIView と UIScrollView しか含まれていないため、コードを使用して他のものが配置されているため、何か問題がある可能性があります...
更新終了
私のレコグナイザーは UIView サブクラスに追加されます:
h ファイル:
#import <UIKit/UIKit.h>
@interface POI : UIView <UIGestureRecognizerDelegate>{
UIImageView *pointBgView;
float tipHeight;
float tipWidth;
}
-(id)initWithPointBg:(NSString *)pointBgURL andFrame:(CGRect)frame;
@property (nonatomic) float tipHeight;
@property (nonatomic) float tipWidth;
@end
m ファイル:
#import "POI.h"
#import <QuartzCore/QuartzCore.h>
@implementation POI
@synthesize tipHeight,tipWidth;
-(id)initWithPointBg:(NSString *)pointBgURL andFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
UITapGestureRecognizer *tapRecognizer =[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(respondToTap:)];
// Specify that the gesture must be a single tap
tapRecognizer.numberOfTapsRequired = 1;
[tapRecognizer setDelegate:self];
// Add the tap gesture recognizer to the view
[self addGestureRecognizer:tapRecognizer];
pointBgView = [[UIImageView alloc] initWithImage:[UIImage imageWithContentsOfFile:pointBgURL]];
pointBgView.layer.shadowColor = [[UIColor blackColor] CGColor];
pointBgView.layer.shadowOpacity = 0.7;
pointBgView.layer.shadowRadius = 4.0;
pointBgView.clipsToBounds = NO;
pointBgView.userInteractionEnabled = YES;
pointBgView.layer.shadowOffset = CGSizeMake(0, 0);
pointBgView.layer.shadowPath = [UIBezierPath bezierPathWithRect:pointBgView.bounds].CGPath;
[pointBgView.layer setBorderColor: [[UIColor whiteColor] CGColor]];
[pointBgView.layer setBorderWidth: 2.0];
[self addSubview:pointBgView];
[self setBackgroundColor:[UIColor clearColor]];
self.tipHeight = 30;
self.tipWidth = 50;
}
return self;
}
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
{
NSLog(@"TAP");
return YES;
}
- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer
{
NSLog(@"StartTap");
return YES;
}
-(void)respondToTap:(UITapGestureRecognizer *)recognizer
{
NSLog(@"UITAP");
[[NSNotificationCenter defaultCenter]
postNotificationName:@"POITap"
object:self];
}
これは問題のあるコードです...
すべての NSLog は、iPad でのテスト時に発生しますが、iPhone (シミュレータかどうか) では発生しません。
そう :
-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
発射しない…
-(BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer
{
NSLog(@"StartTap");
return YES;
}
発射しない…
-(void)respondToTap:(UITapGestureRecognizer *)recognizer
{
NSLog(@"UITAP");
[[NSNotificationCenter defaultCenter]
postNotificationName:@"POITap"
object:self];
}
…発砲しない!?
このアプリには2つの別々のペン先(明らかにiPad用とiPhone用)を使用していると言わなければなりませんが、どちらも含まれているものに関してはまったく同じです...
iPhoneで動作していなかったのでデリゲートを追加したので、それが役立つかどうかを確認したかったのですが、うまくいきません...
このような行動の原因は一体何なのでしょうか?
あなたが私にもたらすことができる助けと平和をありがとう:)
乾杯!