0

あるべきではない小さな問題があります... 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で動作していなかったのでデリゲートを追加したので、それが役立つかどうかを確認したかったのですが、うまくいきません...

このような行動の原因は一体何なのでしょうか?

あなたが私にもたらすことができる助けと平和をありがとう:)

乾杯!

4

1 に答える 1

0

UIScrollViewに問題があるようです.iPadでも、スクロールビューが表示されたときに(UIScrollViewの表示フレームから)見えなかった場合、imageViewをタップできません。

少なくとも私は狂っていないことを知っています:)

ありがとう

于 2013-03-18T15:20:10.327 に答える