0

UILongPressGestureRecognizerは、アクションhandleLongPressOnPhotosを使用してimageViewに追加されます。最も関連するコードは次のとおりです。

- (IBAction)handleLongPressOnPhotos:(UILongPressGestureRecognizer *)sender
{
self.imageWillBeSaved = (UIImageView *)sender.view; //breakPoint1
UIActionSheet *actionSheet = [[UIActionSheet alloc] initWithTitle:nil delegate:self cancelButtonTitle:@"Cancel" destructiveButtonTitle:@"Save the photo" otherButtonTitles: @"Go to the Original photo", nil];
actionSheet.actionSheetStyle = UIActionSheetStyleDefault;
[actionSheet showInView:self.view]; //breakPoint2
NSLog( @"actionSheet addr when created is %p", actionSheet );//breakPoint3
[actionSheet release];//breakPoint4
}

- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex
{
    switch (buttonIndex) {
        case 0:
            UIImageWriteToSavedPhotosAlbum(self.imageWillBeSaved.image, self, @selector(image: didFinishSavingWithError:contextInfo:), nil);
            //[actionSheet dismissWithClickedButtonIndex:0 animated:YES]; i have tried to use this method here, but it didn't work.
            break;

        default:
            break;
    }
}

- (void)image:(UIImage *)image didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo
{
    if (error != NULL)
    {
        // handle error
    }
    else 
    {
        // handle ok status
    }
}

「写真を保存」ボタンをクリックしても、アクションシートは閉じられません。ボタンをもう一度クリックすると、アクションシートが閉じられ、写真が2回保存されます。コードに問題はありますか?前もって感謝します!

追伸 imageViewはscrollViewのサブビューであり、scrollViewはtableViewCellにあります

- (IBAction)handleLongPressOnPhotos:(UILongPressGestureRecognizer *)sender
{
self.imageWillBeSaved = (UIImageView *)sender.view; //breakPoint1
UIActionSheet *actionSheet = [[UIActionSheet alloc] initWithTitle:nil delegate:self cancelButtonTitle:@"Cancel" destructiveButtonTitle:@"Save the photo" otherButtonTitles: @"Go to the Original photo", nil];
actionSheet.actionSheetStyle = UIActionSheetStyleDefault;
[actionSheet showInView:self.view]; //breakPoint2
NSLog( @"actionSheet addr when created is %p", actionSheet );//breakPoint3
[actionSheet release];//breakPoint4
}

「handleLongPressOnPhotos:」メソッドに2つのブレークポイントをbreakPoint1とbreakPoint1として設定しました。imageViewがlongPressされた後、コードの手順に従いました。ステップの順序は:breakPoint1-> breakPoint2-> breakPoint1-> breakPoint2-> breakPoint3-> breakPoint4-> breakPoint3-> breakPoint4で、その後終了します。actionSheetが2回提示されていることは明らかであり、これが問題の原因です。それは奇妙で、私は理由がわからないので、これを避けます。

別の質問で解決された問題 UILongPressGestureRecognizerは、押したときに2回呼び出されます

@ Laddu、@ MichaelDautermann、@sreecharanに感謝します

4

3 に答える 3

1

ITは問題ないように見えますが、ここにnslogを追加してください:-

- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex{

  NSLog(@"buttonIndex.....%d",buttonIndex);

  switch (buttonIndex) {

     case 0:
        UIImageWriteToSavedPhotosAlbum(self.imageWillBeSaved.image, self, @selector(image: didFinishSavingWithError:contextInfo:), nil);

        //[actionSheet dismissWithClickedButtonIndex:0 animated:YES]; i have tried to use this method here, but it didn't work.

        break;

     default:
        break;
   }
}

ACtionSheetDelegateを.hファイルにも追加することを確認してください。

于 2012-05-09T06:55:51.250 に答える
0

actionSheet:willDismissWithButtonIndex:の代わりにを使用しない理由はありますかactionSheet:clickedButtonAtIndex:

を使用する場合はactionSheet:willDismissWithButtonIndex:、ActionSheetを自分で閉じる必要はありません。

于 2012-05-09T08:24:31.510 に答える
0

別の質問で解決された問題UILongPressGestureRecognizerは、押したときに2回呼び出されます

@ Laddu、@ MichaelDautermann、@sreecharanに感謝します

于 2012-05-13T04:03:49.057 に答える