Как вызвать UIImagePickerController Delegate программно или принудительно [без взаимодействия с пользователем]? - PullRequest
2 голосов
/ 13 декабря 2011

В моем приложении я использовал UiimagepickerController для получения Video.in между моей программой был получен любой веб-сервис, который принадлежит моему приложению, я должен остановить захват видео и сохранить видео.

Я использовал StopVideoCapture длясделать выше, но он не вызывает делегат - `

(void) imagePickerController: (UIImagePickerController *) picker didFinishPickingMediaWithInfo: (NSDictionary *) info

How to force call above delegate ??.or How to handle interruption Handling in UIImagePickerController` .. есть идеи?

1 Ответ

2 голосов
/ 13 декабря 2011

Идея использования методов-делегатов не в том, что вы вызываете эти методы - «Они вызывают вас».

Так что я бы не стал называть метод делегата хорошей практикой.Однако, если вы предоставляете UIImagePickerViewController с модальным диалогом (который, я полагаю, является обычным для такого средства выбора), вы можете закрыть его следующим образом вне вашего метода делегата:

[[yourPicker parentViewController] dismissModalViewControllerAnimated:YES];

Source

Обновление: Вы можете использовать ALAssetsLibrary для доступа к сохраненным данным в медиатеке iPhone.Недавно мне пришлось сделать похожий проект, в котором я должен был перечислить все изображения на iPhone.Проект Github ELCImagePickerController.git был очень полезен, поскольку он показывает, как можно получить доступ к элементам вашей библиотеки.Итак, вы сделаете что-то вроде этого:

#import <AssetsLibrary/AssetsLibrary.h>

// ....

-(void)fetchPhotoAlbums{

    if(!self.assetsGroups){
        self.assetsGroups = [NSMutableDictionary dictionary];
    }

    ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init];      
    NSMutableArray *returnArray = [[NSMutableArray alloc] init];

        @autoreleasepool {
            void (^assetGroupEnumerator)(ALAssetsGroup *, BOOL *) = ^(ALAssetsGroup *group, BOOL *stop){
                if (group == nil){
                   // Completed
                   [self.delegate pictureService:self fetchedAlbums:returnArray]; 
                    return;
                }

                Album *currentAlbum = [self albumForAssetsGroup:group];

                // Store the Group for later retrieving the pictures for the album
                [self.assetsGroups setObject:group forKey:currentAlbum.identifier];
                [returnArray addObject:currentAlbum];
                [self.delegate pictureService:self fetchedAlbums:returnArray];
             };

            void (^assetGroupEnumberatorFailure)(NSError *) = ^(NSError *error) {
                NSLog(@"A problem occured %@", [error description]);                                     
            };  

            [library enumerateGroupsWithTypes:ALAssetsGroupAll
                                   usingBlock:assetGroupEnumerator 
                                 failureBlock:assetGroupEnumberatorFailure];   
        }
}


-(void)fetchPhotosForAlbum:(Album *)album{

    ALAssetsGroup *currentGroup = [self.assetsGroups objectForKey:album.identifier];
    NSMutableArray *photos = [NSMutableArray array];
    [currentGroup enumerateAssetsUsingBlock:^(ALAsset *asset, NSUInteger index, BOOL *stop){         
         if(asset == nil){
             [self.delegate pictureService:self fetchedPictures:photos forAlbum:album];
             return;
         }

         [photos addObject:[self pictureForAsset:asset]];
     }];
}

Кроме того, я использую два метода mapper для преобразования классов AL в мои собственные классы моделей.

- (Album *)albumForAssetsGroup:(ALAssetsGroup *)assetsGroup{
    Album *album = [[Album alloc] init];
    album.title = [assetsGroup valueForProperty:ALAssetsGroupPropertyName];
    album.identifier = [assetsGroup valueForProperty: ALAssetsGroupPropertyPersistentID];
    album.assetsCount = assetsGroup.numberOfAssets;
    album.thumbnail = [UIImage imageWithCGImage:assetsGroup.posterImage];
    return album;
}

- (Picture *)pictureForAsset:(ALAsset *)asset{
    Picture *picture = [[Picture alloc]init];
    picture.identifier = [((NSArray *)[asset valueForProperty: ALAssetPropertyRepresentations]) objectAtIndex:0];
    picture.thumbnail = [UIImage imageWithCGImage:asset.thumbnail];
    return picture;
}

См. АктивыБиблиотека Документация

...