Получено, какое подпредставление затронуто в UiScrollView, но не может получить к нему доступ в другой функции. - PullRequest
1 голос
/ 30 апреля 2009

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

NSMutableIndexSet * picturesArray; <- объявлено в .h </p>

- (void) touchesEnded: (NSSet *) touches withEvent: (UIEvent *) event {
if (!self.dragging) {
    [self.nextResponder touchesEnded: touches withEvent:event]; 
    NSLog(@"Touch down");
    for (UITouch *touch in touches) {

        for (int i = 1; i <= [self subviews].count; i++)
        {


        if(CGRectContainsPoint([[self viewWithTag:i]frame], [touch locationInView:self])){      
            NSLog(@"touched %d th view",i);

            NSArray *subviews = [[self viewWithTag:i] subviews];
            UIImageView *view = nil;

            view = [subviews objectAtIndex:0];

                if(view.hidden){
                    // add the index
                    [picturesArray addIndex:i]; 
                    view.hidden = NO; //check mark is shown
                }else{
                    [picturesArray removeIndex:i]; 
                    view.hidden = YES; //check mark is not shown
                }



            //  UIImageWriteToSavedPhotosAlbum([(UIImageView *)[self viewWithTag:i]image], nil, nil, nil); <- WORKS IF CALLED

            }

        }   
    }

}   

Вопрос 1: это лучший способ сделать это? Кажется, что использование for (int i = 1; i <= [self subviews] .count; i ++) довольно медленное. Мне в основном нужно захватить, какое подпредставление было затронуто. Я не понял этого, кроме как проходить КАЖДОЕ подпредставление </p>

Функция savePhotos вызывается и в основном ищет, какие из фотографий были затронуты, и сохраняет их в Фотоальбом. Однако вызов UIImageWriteToSavedPhotosAlbum не выполняется. Это в том же файле, что и TouchesEnded. Но когда вызывается в TouchesEnded, он работает.

  • (IBAction) savePhotos: (id) отправитель {

    NSLog (@ "Набор индексов% @", picturesArray);

    const NSUInteger arrayCount = picturesArray.count;

    NSUInteger * theIndexBuffer = (NSUInteger *) calloc (picturesArray.count, sizeof (NSUInteger)); UIImageWriteToSavedPhotosAlbum ([(UIImageView *) [self viewWithTag: 0] image], ноль, ноль, ноль);

    [picturesArray getIndexes: theIndexBuffer maxCount: arrayCount inIndexRange: nil];

    для (int i = 0; i

    NSLog(@"Element is %d",theIndexBuffer[i]);      
       UIImageWriteToSavedPhotosAlbum([(UIImageView *)[self viewWithTag:i]image], nil, nil, nil); <- THIS CRASHES 
    

    }

}

Вопрос 2. Почему происходит сбой UIImageWriteToSavedPhotosAlbum?

Ответы [ 2 ]

2 голосов
/ 01 мая 2009

1) вместо использования UIImageView реализовать дочерний элемент UIImageView. Затем попробуйте прослушать прикосновения к отдельным подпредставлениям, которые должны решить вашу проблему O (n)

2) возможно, что-то происходит автоматически, дважды проверьте правильность подсчета ссылок

0 голосов
/ 01 мая 2009
  1. попробуй UIView* targetView = [self hitTest:location withEvent:nil];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...