Отслеживание точного местоположения лонгпрессуры с помощью CGPoint

Используя местоположение CGPoint, оно всегда сохраняет последнее изображение в uiscrollview. Когда я нажимаю на другое изображение, чтобы сохранить. Что я могу сделать, чтобы сохранить точное изображение, которое я нажал.

UIScrollView *imageScrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)];
imageScrollView.pagingEnabled = YES;

NSInteger numberOfViews = 61;

for (int i = 0; i < numberOfViews; i++) {

    CGFloat xOrigin = i * self.view.frame.size.width;

 NSString *imageName = [NSString stringWithFormat:@"image%d.png", i];

    _image = [UIImage imageNamed:imageName];

    _imageView = [[UIImageView alloc] initWithImage:_image];

    _imageView.frame = CGRectMake(xOrigin, 0, self.view.frame.size.width, self.view.frame.size.height);

 UILongPressGestureRecognizer *gestureRecognizer = [[UILongPressGestureRecognizer alloc]
                                                       initWithTarget:self
                                                       action:@selector(handleLongPress:)];

    imageScrollView.userInteractionEnabled = YES;
    [imageScrollView addGestureRecognizer:gestureRecognizer];
    gestureRecognizer.delegate = self;
    [gestureRecognizer release];

    [imageScrollView addSubview:_imageView];
imageScrollView.contentSize = CGSizeMake(self.view.frame.size.width * numberOfViews, self.view.frame.size.height);

    - (void)handleLongPress:(UILongPressGestureRecognizer*)gestureRecognizer{
if (gestureRecognizer.state == UIGestureRecognizerStateBegan){
    UIActionSheet *actionSheet = [[UIActionSheet alloc] initWithTitle:nil delegate:self cancelButtonTitle:@"Cancel" destructiveButtonTitle:nil otherButtonTitles:@"Save Photo", nil];
    actionSheet.actionSheetStyle = UIActionSheetStyleBlackTranslucent;
    [actionSheet showInView:self.view];
    [actionSheet release];

     }}

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

switch (buttonIndex) {
    case 0:
        [self savePhoto];

       break;

    default:
        break;

}

   -(void)savePhoto{

CGPoint location = [gesture locationInView:_imageView];

if  (CGRectContainsPoint(_imageView.bounds, location)){

UIImageWriteToSavedPhotosAlbum(_image, self, @selector(image: didFinishSavingWithError:contextInfo:), nil);
   }}}

Любые идеи будут оценены.

Спасибо

Ответы на вопрос(1)

Решение Вопроса

UIScrollView в которомLongPressGestureRecognizer срабатывает. Вы должны проверить свой вид прокруткиcontentOffset (использованиеcontentOffset.x для горизонтальных планировок иcontentOffset.y для вертикальных макетов), чтобы определить, какое изображение вы должны сохранить.

Кроме того, вы можете преобразовать точку касания вUIImageView пример'с локальной системой координат и посмотреть, находится ли точка в представлении изображенияbounds Прямоугольник.

ОБНОВИТЬ

Например, вы можете использовать что-то вроде этого, чтобы определить, находится ли точка в пределах изображения.с границ (примечание: у меня естьне проверил это, и это при условии, что к представлению с прокруткой добавлено более одного представления изображения:

if (CGRectContainsPoint(_imageView.bounds, [self.view convertPoint:location toView:_imageView]))
{
    // do something
}

Вам также следует рассмотреть возможность определения, какое изображение должно быть сохранено до и сохранение ссылки на это изображение перед отображениемUIActionSheet пользователю, так как это может уменьшить количество потенциальных проблем, с которыми вы можете столкнуться, и будет легче читать позже, но это мое субъективное мнение.

 user145224818 окт. 2012 г., 22:22
как я могу поместить это в код, когда изображения помещаются в одну строку в моем UIScrolView
 user145224818 окт. 2012 г., 22:49
что, если я могу пометить их с помощью [imageView setTag: i]; и получить их позже с помощью [scrollView viewWithTag: index + 1]; в этом есть смысл
 user145224818 окт. 2012 г., 22:38
Нет по-прежнему проблемы с сохранением последнего изображения в режиме прокрутки
 user145224818 окт. 2012 г., 22:44
хорошо, это имеет смысл для меня, как я могу это сделать
 Thuggish Nuggets18 окт. 2012 г., 22:49
Иметь свойUIViewController принятьUIScrollViewDelegate Протокол в заголовке (.h), установите ваш контроллер представления как представление прокруткиделегировать, затем реализовать– scrollViewDidScroll: метод в реализации (.m). ВнутриscrollViewDidScroll: метод, проверьте представление прокруткиcontentOffset собственности и посмотрим сколькостраницы» пользователь прокрутил, чтобы определить, какое изображение отображается в данный момент.
 Thuggish Nuggets18 окт. 2012 г., 22:41
Вы меняете какое изображение ваше_image ivar ссылается, когда пользователь прокручивает изображения? Если нет другого фрагмента кода, касающегося ссылки, то он всегда будет последним, что хранится в нем, что, как показано в приведенном выше примере кода, выглядит какfor цикл, который инициализирует иерархию представления. Кроме того, вы также должны убедиться, что_imageView ivar обновляется, когда пользователь прокручивает содержимое.
 user145224818 окт. 2012 г., 22:34
позвольте мне попробовать и посмотреть, поможет ли это мне. спасибо

Ваш ответ на вопрос