Отслеживание точного местоположения лонгпрессуры с помощью 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:34
позвольте мне попробовать и посмотреть, поможет ли это мне. спасибо
 user145224818 окт. 2012 г., 22:38
Нет по-прежнему проблемы с сохранением последнего изображения в режиме прокрутки
 Thuggish Nuggets18 окт. 2012 г., 22:41
Вы меняете какое изображение ваше_image ivar ссылается, когда пользователь прокручивает изображения? Если нет другого фрагмента кода, касающегося ссылки, то он всегда будет последним, что хранится в нем, что, как показано в приведенном выше примере кода, выглядит какfor цикл, который инициализирует иерархию представления. Кроме того, вы также должны убедиться, что_imageView ivar обновляется, когда пользователь прокручивает содержимое.
 user145224818 окт. 2012 г., 22:44
хорошо, это имеет смысл для меня, как я могу это сделать

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