0

私のコードでは、ポップオーバーを表示する前にタッチの座標を取得する必要があります。これはコードです:

UITapGestureRecognizer *tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapped:)];
[tapRecognizer setNumberOfTapsRequired:1];
[tapRecognizer setDelegate:self];
[self.view addGestureRecognizer:tapRecognizer];
FreeAndNil(tapRecognizer);

ratingSliderViewController = [[CMRatingSliderViewController alloc] init];
ratingPopoverController = [[UIPopoverController alloc] initWithContentViewController:ratingSliderViewController];
[ratingPopoverController setDelegate:self];
[ratingPopoverController setPopoverContentSize:CGSizeMake(360.0, 50.0)];
[self setPopoverController:ratingPopoverController];
[ratingPopoverController presentPopoverFromRect:CGRectMake(latestTouchPoint.x, latestTouchPoint.y, 10.0,10.0) inView:detailView permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];

[self.view removeGestureRecognizer:tapRecognizer];


...

}

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    UITouch *touch = [touches anyObject];
    latestTouchPoint = [touch locationInView:self.view];
}

ただし、ポップオーバーはtouchesBegan呼び出しの前に表示されます。どうすればこれを解決できますか? 遅延を使用したり、ジェネリックtouchesBeganメソッドでポップオーバー コードを実行したりしたくありません。

4

3 に答える 3

2

ビューがロードされたら、最初にジェスチャ レコグナイザを追加します。

@property (nonatomic, strong) UITapGestureRecognizer *tapRecognizer;


 - (void)viewDidLoad
{
    [super viewDidLoad];
    _tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapped:)];
    [_tapRecognizer setNumberOfTapsRequired:1];
    [self.view addGestureRecognizer:_tapRecognizer];
}

また、(現在のように) 宣言するときではなく、タップ認識ハンドラー関数内でポップオーバーを表示するようにしてください。

-(void) tapRecognizer:(UITapGestureRecognizer *)tabRecognizer{

     CGPoint touchedPoint = [gestureRecognizer locationInView:self.view];
     NSLog(@"Point x %f x %f", aPoint.x, aPoint.y);

     ratingSliderViewController = [[CMRatingSliderViewController alloc] init];
     ratingPopoverController = [[UIPopoverController alloc] initWithContentViewController:ratingSliderViewController];
     [ratingPopoverController setDelegate:self];
     [ratingPopoverController setPopoverContentSize:CGSizeMake(360.0, 50.0)];
     [self setPopoverController:ratingPopoverController];
     [ratingPopoverController presentPopoverFromRect:CGRectMake(touchedPoint,     touchedPoint, 10.0,10.0) inView:detailView   permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
 }
于 2013-05-01T11:53:15.163 に答える
0

このデリゲート メソッドを使用して、ジェスチャにデリゲートを追加し、

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
于 2013-05-01T11:54:11.600 に答える