在 UIScrollView 中加载 200 多个子视图图像时程序崩溃

2024-02-27

我正在使用 ALAssetLibrary 开发类似的程序,例如 iPhone 中的照片。我正在尝试在滚动视图中加载图像。当相册中的图片数量较少时,一切正常。但是当我尝试加载包含 200 多张照片的相册时,我的程序结束了,没有任何错误消息。有人知道这个程序吗? 这是我加载滚动视图的代码:

- (void)loadScrollView
{
for (UIView *v in [scrollview subviews]) {
    [v removeFromSuperview];
}

CGRect scrollFrame = [self frameForPagingScrollView];
scrollview = [[UIScrollView alloc] initWithFrame:scrollFrame];

CGRect workingFrame = scrollview.frame;
workingFrame.origin.y = 0;

photoCount = [info count];
for(NSDictionary *dict in info) {
    UIImageView *imageview = [[UIImageView alloc] initWithImage:[dict objectForKey:UIImagePickerControllerOriginalImage]];
    [imageview setContentMode:UIViewContentModeScaleAspectFit];
    imageview.frame = workingFrame;

    [scrollview addSubview:imageview];
    [imageview release];
    [scrollview setPagingEnabled:YES];
    [scrollview setDelegate:self];
    [scrollview setAutoresizesSubviews:YES];
    [scrollview setAutoresizingMask:UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight];
    [scrollview setShowsVerticalScrollIndicator:NO];
    [scrollview setShowsHorizontalScrollIndicator:NO];

    workingFrame.origin.x = workingFrame.origin.x + workingFrame.size.width;

}

[self setScrollViewContentSize];
[[self view] addSubview:scrollview];
}

非常感谢!


我个人把我的全部UIImageView我的物体UIScrollView,但仅为当前可见的图像设置图像属性(并清除不再可见的图像属性)。如果你有数千张图像,也许这也太浪费了(也许你甚至不想保留UIImageView对象,即使没有它们image属性集,大约),但如果您要处理数百个,我发现这是一个很好的简单解决方案,解决了UIImage对象:

- (void)viewDidLoad
{
    [super viewDidLoad];

    self.scrollView.delegate = self;

    // all of my other viewDidLoad stuff...
}

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];

    [self loadVisibleImages];
}

- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
    [self loadVisibleImages];
}

- (void)loadVisibleImages
{
    CGPoint contentOffset = self.scrollView.contentOffset;
    CGRect  contentFrame  = self.scrollView.bounds;
    contentFrame.origin = contentOffset;

    for (UIImageView *imageView in _imageViews) // _imageViews is (obviously) my array of images 
    {
        if (CGRectIntersectsRect(contentFrame, imageView.frame))
        {
            imageView.image = ... // set the image property
        }
        else
        {
            imageView.image = nil;
        }
    }
}

这是一些执行许多其他操作的代码的片段,因此显然您的实现将有很大不同,但它显示了如何使用scrollViewDidScroll确定哪些图像可见并适当地加载/卸载图像。如果您还想删除/添加,您可能可以进一步更改UIImageView对象也是如此,但显然“这个 imageview 可见”的逻辑必须改变,而不是利用frame所有的UIImageView对象。

我不确定我是否正确地阅读了您的代码,但是您是否也有所有的UIImage字典中也有对象吗?这本身就是对内存的过度使用。我通常将实际图像保存在一些持久存储中(例如我使用Documents文件夹,尽管你可以使用Core Data or SQLite,尽管后两者对大图像造成了显着的性能影响)。我保留在内存中的唯一图像是 UI 主动使用的图像,我将使用NSCache出于性能原因,我反对保留一些,但我还是从持久存储而不是活动内存中提取它们。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 UIScrollView 中加载 200 多个子视图图像时程序崩溃 的相关文章

  • 网站在 iPhone 屏幕右侧显示空白区域

    我遇到问题http eiglaw com http eiglaw com iPhone 屏幕右侧显示约 25 像素宽的空白 边框 我在 stackoverflow 上研究了这个问题 这些帖子是相关的 但是当我尝试提供的各种解决方案时 我无法
  • 在横向中自动调整 UITableCells 内容的大小

    在 UITableView 中 我通过 UILabels 将内容添加到单元格中 定义最佳尺寸 与单元格宽度允许的一样大 我注意到只有tableView contentSize width是可靠的 因为cell contentView bou
  • Parse.com 从相关 PFObject 获取 PFUser

    我正在将照片保存为 PFObject 解析 并使用 PFUser currentUser 用户 ID 作为其键之一 我想在表格视图中显示照片以及该 PFUser 的详细信息 但是当我尝试获取用户时 PFUser user self phot
  • 如何使用 NSUserDefaults 在 Swift 中存储自定义类的数组?

    我有一个名为的自定义类Person当某人输入信息时 它会存储有关某人的各种属性 class Person Person dictionary variable var name String var age String var html
  • 导入 RNCryptor 后架构 armv7 的未定义符号

    我导入了 RNCryptor 可以在这里找到 https github com rnapier RNCryptor https github com rnapier RNCryptor进入我的应用程序 但是 我在日志中收到了三个错误 Und
  • GeoFire Swift 3 - 保存和更新坐标

    我正在尝试使用 GeoFire 将坐标存储到 Firebase 数据库中 我不确定如何更新新坐标 因为它们每秒都会更改 更新 随着childByAutoId 它正在为每辆自行车生成一个新的唯一 ID 如何引用这个唯一的自行车 ID 例如 用
  • 在 OS X 上创建和使用静态库

    好的 我正在尝试创建一个 Cocoa 库 静态 并使用 但我不断收到错误 我创建了一个超基本的静态库 TSXLib 其中仅包含一个额外的类 import
  • 在 Swift 中从 UIScrollView 创建 PDF 文件

    我想从 UIScrollView 的内容创建一个 PDF 文件 func createPdfFromView aView UIView saveToDocumentsWithFileName fileName String let pdfD
  • 更改组织以使用 Xcode 9 在 iTunes Connect 上上传二进制文件

    我在 Xcode9 上配置了多个团队 当我尝试将二进制文件上传到 Xcode 9 上的 iTunes Connect 时 没有更改团队的选项 并且出现以下错误 ERROR ITMS 4088 来自苹果开发者论坛的解决方案 1 正常存档2 窗
  • 如何接收有关与我共享的记录中所做更改的 CloudKit 通知?

    我有两个 iCloud 帐户 A and B 在两个不同的设备上 来自其中之一 A 我将 ckrecord 分享给另一个人 B 像这样 let controller UICloudSharingController controller p
  • 在 iOS 上将 NSString 转换为 NSDate 的正确方法?

    我一直在使用此方法将常规 NSString 对象转换为 NSDate 但尝试向 Apple 提交更新 但遭到拒绝 在 iOS 中还有什么其他方法可以做到这一点 NSString date str 2011 08 12T12 20 00Z N
  • UIButton的高亮状态由什么控制事件开始和结束

    我正在创建类似钢琴的视图UIButton作为钢琴键 什么UIControlEvents当按钮获得和失去突出显示状态时 我应该监听以获得回调吗 我试图创建子类UIButton并添加属性观察者highlighted并且运行良好 然而 有时我需要
  • 覆盖层不与 UITableView 一起滚动 - iOS

    我有一个 UITableView 类 它使用以下方法在转到下一个屏幕时调用加载覆盖 问题是这个加载屏幕不随列表滚动 所以如果你滚动一点并单击某些东西 加载屏幕不会显示 因为它位于顶部 如何让加载屏幕始终保持在 UITableView 的顶部
  • 忽略触摸事件,让其下面的视图处理触摸?

    我有一个用户可以触摸的可拖动视图 但它的某些矩形将没有图像 alpha 0 当用户单击透明区域时 我能够在没有 alpha 信息的情况下构造透明区域 我希望透明区域下方的视图 同一类 来检测触摸 我的策略是当用户触摸透明区域时让视图忽略触摸
  • 推送动画,没有阴影和停电

    我有一个简单的iOS NavigationController基于应用程序 二UICollectionViews 相继 如果元素打开 第一个合集 被点击时 第二集 将被打开 非常简单 重要的提示 Both UICollectionViews
  • 虚拟乐器 iPhone 应用程序中的 VoiceOver 辅助功能?

    我收到盲人用户的评论 称我的一些声音和音乐相关应用程序只能在关闭 VoiceOver 的情况下使用 在 iOS 设备上启用 VoiceOver 辅助功能后 是否可以启用音乐键盘或鼓垫触摸区域 以便在点击键盘键或虚拟鼓组 等 时可以立即播放音
  • Apple Watch 预构建操作可更改故事板 customModule 引用

    我目前有一个项目 其中包含同一应用程序的 3 个不同版本 不同的品牌等 该项目运行得很好 从那时起 我添加了 3 个新的 Apple Watch 目标 每个应用程序 版本 1 个 其中 2 个引用 主 Apple Watch 目标中的文件
  • 如何让按钮闪烁?

    我试图在扫描正确时将按钮的颜色 只是闪烁 闪烁 更改为绿色 在出现问题时将按钮的颜色更改为红色 我可以用这样的视图来做到这一点 func flashBG UIView animateWithDuration 0 7 animations s
  • 根据 iOS 版本使用不同的类实现?

    iOS 11 最近添加了一个我想使用的新功能 但我仍然需要支持旧版本的 iOS 有没有一种方法可以将同一个类编写两次 并让较新版本的 iOS 使用该类的一个版本 而旧版本的 iOS 使用另一个版本 注 最初我用的是if available
  • PFQueryTableViewController 错误

    我正在遵循在线教程 使用 Parse 作为后端创建照片共享应用程序 我已经运行了两次教程 两次都从头开始创建应用程序 但在同一位置仍然出现相同的错误 我到处寻找解决方案 但仍然没有运气 我正在使用 PFQueryTableViewContr

随机推荐

  • 使用 GetProcAddress 从 C++ 调用 Delphi DLL:回调函数因参数无效而失败

    我有一个第三方 Delphi DLL 我从 C 调用它 不幸的是 我无法访问 Pascal DLL 代码 并且我不是 Pascal 程序员 没有lib文件 所以我使用GetProcAddress调用许多DLL函数 成功地按值 地址和引用传递
  • WCF 和 HTTP GET

    我的WCF服务公开了这个函数 public SerialNumberInfo GetSerialNumberInfo string serialNumber 有没有办法在我的 WCF 服务上启用 HTTP GET 例子 http local
  • 动态链接和 Python SWIG (C++) 在 C++ 中工作在 python 中失败

    我有一个库 我使用 SWIG 创建了一个 python 包装器 该库本身接受用户提供的函数 这些函数位于动态链接的 so 文件中 目前 我正在处理我自己创建的一个 并设法在 C 中使动态链接正常工作 当我尝试在 python 中运行它时 出
  • Ember.js 路由器入门

    我想在下一个项目中学习使用 Ember js 到目前为止我已经阅读了文档here http emberjs com documentation 但我没有看到有关路由器的解释 然后我读了指南here http emberjs com guid
  • 查找图像中一条线上的像素坐标

    我有一个表示为二维数组的图像 我想获取从点 1 到点 2 的直线上的像素坐标 例如 假设我有一张尺寸为 5x4 的图像 如下图所示 我有一条从坐标点 1 开始的线 0 2 到点 2 4 1 就像下图中的红线一样 所以在这里我想将蓝色像素的坐
  • 如何在 JPQL 中将日期时间转换为日期?

    这段代码有什么问题 Query value Select date ivd trnDatetime as date ivd binNo as bin ivd snNo as sn count ivd invoiceNo as totInvo
  • api 获取请求失败后重新调用 useEffect

    我正在执行 useEffect 以使用 JSON 数据更新状态 但是 获取请求有时会失败 因此如果发生这种情况 我想重新执行 useEffect 挂钩 import React useState useEffect from react i
  • 如何使用注释排除java类在maven中编译

    我已经有一个working解决方案 我可以使用 Maven 指定在使用特定 Maven 配置文件时不编译哪些类 但我想使用通用解决方案并使用注释代替 我目前的解决方案就像
  • 伪元素内容的数据内容中的 Unicode

    我想使用 JQuery 将 unicode 放入 data content 属性中 以便将其用于伪元素内容 但我找不到正确的格式 你如何显示unicode 下面只是显示 x25BC a after content attr data con
  • Vim 从光标上次消失的位置开始

    如何让 Vim 始终从我上次退出给定文件时所在的行开始 将其放入您的 vimrc 中 When editing a file always jump to the last cursor position au BufReadPost if
  • WinForms C# 中优雅的日志窗口

    我正在寻找一种有效的方法来实现 Windows 窗体应用程序的日志窗口 过去我已经使用 TextBox 和 RichTextBox 实现了几个 但我仍然对功能不完全满意 此日志旨在为用户提供各种事件的最新历史记录 主要用于数据收集应用程序
  • 如何测量在 ubuntu 上运行的 java 应用程序的 I/O 时间?

    我想收集我的应用程序等待 I O 的时间 我正在 ubuntu linux 上运行这个 java 应用程序 我正在使用 yourkit 分析器 建议是否有其他分析工具来测量 I O 时间 Youtkit 非常适合在您的应用中使用变焦显微镜
  • 在循环中使用node-mysql插入数据

    我的代码如下 var mysql require mysql var client mysql createClient user root password root host localhost client query USE sam
  • jqgrid 增加字体大小时每个单元格周围的间距

    我使用以下 css 增加了网格单元格的字体大小 ui jqgrid ui jqgrid view font size 14px 现在 每个单元格中文本周围的间距都很小 如何增加该空间 以便较大的文本能够在每个单元格中正确显示 预先致谢 更新
  • 如何在oracle中使用DBMS_CRYPTO.encrypt函数

    我想加密数据库中的密码列 并且我正在尝试使用内部存在的加密函数DBMS CRYPTO包 已从 sys 帐户向当前用户授予执行访问权限 但出现以下错误 请举例说明如何使用此功能 select DBMS CRYPTO encrypt 12345
  • Bootstrap:将输入与按钮对齐

    为什么按钮和输入在 Bootstrap 中不能很好地对齐 我尝试了一些简单的事情 例如
  • 如何使用 PowerShell 了解 IIS 中托管的特定网站的活动会话计数

    我问了一个关于了解 IIS 中正在运行的会话计数的问题 从 IIS 获取我托管的 Asp Net 网站的运行会话计数 https stackoverflow com questions 9734561 get running session
  • 在 MS SQL Server 中隐藏表中的列

    任何人都可以分享在 SQL Server 2012 中隐藏表中特定列的步骤 因为我不想删除该列 我所说的隐藏是指每当我对特定表使用选择查询时 它永远不应该显示该列 是否可以 我需要使该列隐藏 无论任何用户登录和我使用的任何查询 第三者编辑
  • Xcode 由于 swift 中的持久容器而崩溃

    我目前正在制作一个实施核心数据的应用程序 但是 当我构建时 它在这一行崩溃 线程 1 致命错误 未解决的错误 错误 Domain NSCocoaErrorDomain Code 134140 持久存储迁移 失败 缺少映射模型 UserInf
  • 在 UIScrollView 中加载 200 多个子视图图像时程序崩溃

    我正在使用 ALAssetLibrary 开发类似的程序 例如 iPhone 中的照片 我正在尝试在滚动视图中加载图像 当相册中的图片数量较少时 一切正常 但是当我尝试加载包含 200 多张照片的相册时 我的程序结束了 没有任何错误消息 有