UIImagepickercontroller: is it possible to change the sort order of the images in camera roll?

偶尔善良 提交于 2019-11-27 22:26:28

If you don't mind adding an extra step of selecting the camera roll from an album list you can try changing your sourceType from SavedPhotoAlbums to PhotoLibrary:

imagePickerController.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;

After selecting the desired album, the next photo selection view will show the most recent images at the bottom.

n13

This annoyed me a whole lot - I am this close to implementing my own custom image picker using AssetsLibrary.

But in the meantime, this hack worked for me - I am displaying the picker, searching for the scroll view in the view hierarchy, and scrolling it to the end, more or less. It needs to be animated as this happens when the view is already loaded - but it's still better than the user having to scroll through 5,000 photos until they get to the newest ones.

    [self presentViewController:self.imagePickerController animated:YES completion:^() {
        // scroll to the end - hack
        UIView *imagePickerView = imagePickerController.view;

        UIView *view = [imagePickerView hitTest:CGPointMake(5,5) withEvent:nil];
        while (![view isKindOfClass:[UIScrollView class]] && view != nil) {
        // note: in iOS 5, the hit test view is already the scroll view. I don't want to rely on that though, who knows
        // what Apple might do with the ImagePickerController view structure. Searching backwards from the hit view
        // should always work though.
        //NSLog(@"passing %@", view);
            view = [view superview];
        }

        if ([view isKindOfClass:[UIScrollView class]]) {
            //NSLog(@"got a scroller!");
            UIScrollView *scrollView = (UIScrollView *) view;
            // check what it is scrolled to - this is the location of the initial display - very important as the image picker
            // actually slides under the navigation bar, but if there's only a few images we don't want this to happen.
            // The initial location is determined by status bar height and nav bar height - just get it from the picker
            CGPoint contentOffset = scrollView.contentOffset;
            CGFloat y = MAX(contentOffset.y, [scrollView contentSize].height-scrollView.frame.size.height);
            CGPoint bottomOffset = CGPointMake(0, y);
            [scrollView setContentOffset:bottomOffset animated:YES];
        }
}];

There is no way to customize UIImagePickerController in this way, but as of iOS 4.0, you can basically build your own image picker in any way you like using the AssetsLibrary framework.

You can get images, using ALAsset in an arry, and then can sort them as you want and use in table view or collectionview to build your own custom album

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!