这是我现在常用的域,我已经管理了一些功能,但我需要做得更好。
我正在尝试填充最近的图像从相机胶卷。我很确定有更优雅的方法。另一件让我不安的事是,这是
Block > loop > another block
任何更好的解决方案或简化是赞赏的。
ALAssetsLibrary *assetsLibrary = [[ALAssetsLibrary alloc] init];
[assetsLibrary enumerateGroupsWithTypes:ALAssetsGroupSavedPhotos
usingBlock:^(ALAssetsGroup *group, BOOL *stop) {
if (nil != group) {
[group setAssetsFilter:[ALAssetsFilter allPhotos]];
NSLog(@"%d images found", group.numberOfAssets);
for(int i = group.numberOfAssets - 5; i<group.numberOfAssets - 1; i++){
[group enumerateAssetsAtIndexes:[NSIndexSet indexSetWithIndex:i]
options:0
usingBlock:^(ALAsset *result, NSUInteger index, BOOL *stop) {
if (nil != result) {
ALAssetRepresentation *repr = [result defaultRepresentation];
UIImage *img = [UIImage imageWithCGImage:[repr fullResolutionImage]];
CGFloat aspectRatio = img.size.width/img.size.height;
UIImageView *imgView = [[UIImageView alloc] init];
imgView.frame = CGRectMake(10, self.yCord, 300, 300 /aspectRatio);
self.yCord += margin + (300/aspectRatio);
imgView.image = img;
imgView.layer.shadowRadius = 5.0;
imgView.layer.shadowColor = [UIColor blackColor].CGColor;
[self.scroll addSubview:imgView];
*stop = YES;
self.scrollViewHeight = self.yCord + imgView.frame.size.height + margin;
CGSize scrollViewSize = CGSizeMake(320, self.scrollViewHeight);
[self.scroll setContentSize:scrollViewSize];
}
}];}
}
*stop = NO;
} failureBlock:^(NSError *error) {
NSLog(@"error: %@", error);
}];
还有我如何使图像做延迟加载。我现在禁用了分页,所有图像同时加载,这在大多数情况下是危险的。
实际上您应该为此目的使用NSOperation和NSOperationQueueClass,或者也可以使用GCD
。但是如果你查看相应类的指南参考,你会发现NSOperation and NSOperation
类具有与GCD相似的高水平灵活性。在这里,我将给你一些参考教程,在那里你可以得到如何有效地使用这些有用的类的想法。
这里是NSOperation的链接在本教程中作者提到了很多细节,我很确定它会真正帮助你,如果你看看NSOperation和NsoperationQueue在做同样的任务,即下载图像或在后台从相机获取图像。
这是GCD的教程。
在这里我想告诉你,为什么我给你这些教程参考,因为这些教程给了很多帮助,在实现这样的事情非常有效。
嘿,朋友试着从上面得到一些点,在这里我只介绍我的经验。如何接受我的推荐信由你决定。
如果你从上面得到任何想法,我很高兴。
EDIT: Friend不要忘记您的需求中最重要的部分,这可能是您的类(UIScrollView
)的最小内存占用。假设在Camera中有很多图像你需要获取所有图像可能有几百个的数量假设你要在UIImageView中显示这些图像。这里您需要遵循Infinite ScrollView
的概念(只创建三个mainView,只是刷新这些mainView上的数据)。即只创建三个主视图view1(这将被视为右视图),view2(将被视为中心)和View3(似乎是左视图)。你需要以这样的方式编写代码,你只需要这些视图来分配和添加这三个视图上的所有UIImageViews。你需要使用UIScrollView
的委托来管理所有的事情。这里我只给出了逻辑,你必须通过它,甚至我强迫你,你应该遵循这个东西在你的应用程序,但为了高速应用程序的缘故,你应该考虑它。您可以在互联网上找到许多相同逻辑的线程,并且可以找到许多关于此逻辑的教程。如果你做不到,请不要责怪我,在这里我给出了我的意见,为了更好的发展。
我希望你能理解我的观点。