小编run*_*mad的帖子

关于使用沙箱与缓存进行 UITableView 异步图像下载的建议

苹果一周前刚刚发布了一些关于 UITableView 中延迟加载图像的示例代码。我检查了它并将其实现到我自己的 UITableView(这是一个用于快速滚动的 drawRect 视图)中,看看与我已经在做的事情是否有区别。

实施后我不确定什么是最好的;新代码或我已有的代码。我没有看到我的 3GS 的速度有太大的提高。

“沙盒”方法:延迟加载图像,然后保存到沙盒中的本地 tmp 文件夹中。每次显示该单元格时,它都会查找具有该文件名的图像是否已位于沙箱文件夹中。如果是,则检索图像并显示它,如果不是,则继续下载,将其保存在本地,然后显示。这样做的好处是,当您第二次打开应用程序时,图像不会是空白的。它们已经被下载并准备好显示。

缓存方法:这也会延迟加载图像,但是,现在我在表视图中显示的数组中的每个对象上包含一个 UIImage。现在,我不再将图像保存在本地,而是下载图像并将其放入对象的数组中。现在,它不再每次都检查文件名,而是只检查 UIImage != nil 是否并使用缓存的图像(如果 nil 则下载)。

一个小的区别是,缓存代码在将图像缓存到单元格中显示的确切大小之前会调整图像大小,而沙箱代码示例中使用的图像实际上比它需要显示的图像要大一些,这意味着滚动时它也必须动态调整大小。我几个月前读到,这样做可能有点昂贵,而且我也不确定使用缓存图像而不是沙箱存储图像是否有很大区别,因此无论如何都会占用更多 CPU 资源(与到您使用上面的缓存代码从缓存中保存的内容)。

我想我的问题是我是否应该担心缓存代码?同样,新代码不会在新启动时立即加载图像,而旧代码实际上会加载图像,因为它已经在沙箱中。由于我没有重复使用图像,因此我有很多图像要加载(从沙箱或缓存),所以我没有注意到速度上的巨大差异。事实上,在我看来,在我的 3GS 上这几乎是不可能的。滚动不是丝般光滑,我认为这是由于大量图像无法重复使用(每个单元格有不同的图像)。我还想知道,一旦文件夹中有 1000 多张图像,沙箱方法是否会变慢,例如,最终让它查看的图像不仅仅是 100 张左右。

我希望我说得有道理。我想要非常彻底地了解细节,并且如果需要的话我很乐意提供更多细节。

谢谢!

iphone sandbox uitableview uiimage

5
推荐指数
1
解决办法
1216
查看次数

将"当前时间"转换为"自00:00以来的分钟数"计算帮助

我没有那么多地使用NSDate,所以我想要一些帮助我正在做的计算.

我有一个整数,从午夜开始,我的商店的收盘时间是几分钟.基本上,我的商店在下午5点关闭,这给了我整数1020.

所以现在是10.45PM或22.45.从00:00开始的整数是1365,我可以这样说

if (storeHour < currentTime) {
      // closed!
}
Run Code Online (Sandbox Code Playgroud)

但是,我不知道如何从"22.45"得到我从NSDate到将其转换为表示自00:00以来的时间的整数.NSDate中有什么东西可以帮助我吗?

谢谢

iphone objective-c nsdate

5
推荐指数
2
解决办法
3593
查看次数

搞清楚initWithFrame:self.view.frame 20像素(状态栏)问题一劳永逸

我有一个简单的UINavigationController.在init方法中,我创建并添加UITableView作为子视图.

- (id)init {
    self = [super init];
    if (self) {
        NSLog(@"%@", NSStringFromCGRect(self.view.frame)); // {{0, 20}, {320, 460}}
        tableView = [[UITableView alloc] initWithFrame:self.view.frame];
        [self.view addSubview:tableView];
    }
    return self;
}
Run Code Online (Sandbox Code Playgroud)

我发现在处理新项目时我总是遇到同样恼人的问题.添加的子视图最终位于导航栏下方20个像素处.

为什么我最终以{{0,20},{320,460}}为self.view.frame?我不想强制使用CGRect框架,我宁愿根据视图控制器的框架进行设置,这样我就不会遇到动态框架更改的问题(网络共享,电话等等,状态栏更高) .

更新:还注意到我的框架高度为460.这也没有意义.在我的情况下,我实际上有一个标签栏,所以高度不应该减去状态栏,减去uinavigationbar并减去标签栏高度?

谢谢

frame uiviewcontroller ios

5
推荐指数
1
解决办法
2765
查看次数

修剪UIImage边框

这是我想修剪的图像的一个例子.我想摆脱图像周围的边框(在这种情况下是顶部和底部黑条).

UIImage修剪

我在Github上找到了一个库:CKImageAdditions,但它似乎不起作用.当我传入UIColor(RGB颜色)时,它只返回相同的图像.

我可以找到许多示例和类别类来修剪UIImage,任何透明像素作为边框,但在这种情况下我需要修剪黑色.我已经对我的图像中的颜色进行了采样,它们的颜色值确实是255,但它似乎与上面的库所寻找的不匹配.

有没有人有他们使用的图书馆或任何见解?我搜索和搜索了CKImageAdditions,这是我唯一可以找到广告用颜色修剪的东西(虽然不幸的是在我的情况下不起作用).

c objective-c uiimage cgimage ios

5
推荐指数
1
解决办法
1378
查看次数

无法pushViewController进行子视图

我有一个UINavigationController,我有单独的UIViews,我在使用UISegmentControl之间切换.在切换视图时,我将视图作为子视图添加到导航控制器的视图中:

[self.view addSubview:segmentTab1.view];
Run Code Online (Sandbox Code Playgroud)

和

[self.view addSubview:segmentTab2.view];
Run Code Online (Sandbox Code Playgroud)

然后,在subViews中,每个都有一个UITableView,但我的问题是,我无法将新的viewController推送到didSelectRowAtIndexPath方法中的视图中.

正确调用该方法并通过设置断点,我可以看到推送视图的方法也被调用,但没有任何反应.这是我推送它的代码:

[self.navigationController pushViewController:detailsViewController animated:YES];

我也试过了

[super.navigationController pushViewController:detailsViewController animated:YES];

我做错了什么 - 或者是不可能用子视图做到这一点?

iphone uitableview uinavigationcontroller didselectrowatindexpath

4
推荐指数
1
解决办法
9425
查看次数

为"更多"标签更改NavigationBar的颜色?

如果TabBarController中有超过5个视图控制器,则会自动为您设置"更多"视图.是否可以在此视图中更改navigationBar的颜色以匹配我使用的颜色,而不是默认的蓝色?

iphone uitabbarcontroller uinavigationcontroller

4
推荐指数
1
解决办法
3316
查看次数

UIView动画块不是动画视图的子视图

我无法使用以下代码实现任何动画:

if (self.segmentControl.selectedSegmentIndex == 0) {
    [UIView transitionFromView:tableView
                        toView:mapView
                      duration:1.0
                       options:UIViewAnimationTransitionFlipFromLeft
                    completion:nil
         ];
    }
if (self.segmentControl.selectedSegmentIndex == 1) {
    [UIView transitionFromView:mapView
                        toView:tableView
                      duration:1.0
                       options:UIViewAnimationTransitionFlipFromRight
                    completion:nil
         ];
}
Run Code Online (Sandbox Code Playgroud)

视图实际上是交换,但没有任何动画.这很奇怪.我也曾尝试交换mapView和tableView与self.view.subviews像这样(objectAtIndex:0是toolBar):

if (self.segmentControl.selectedSegmentIndex == 0) {
    [UIView transitionFromView:[self.view.subviews objectAtIndex:1]
                        toView:[self.view.subviews objectAtIndex:2]
                      duration:1.0
                       options:UIViewAnimationTransitionFlipFromLeft
                    completion:nil
         ];
    }
if (self.segmentControl.selectedSegmentIndex == 1) {
    [UIView transitionFromView:[self.view.subviews objectAtIndex:2]
                        toView:[self.view.subviews objectAtIndex:1]
                      duration:1.0
                       options:UIViewAnimationTransitionFlipFromRight
                    completion:nil
         ];
}
Run Code Online (Sandbox Code Playgroud)

uiviewanimation uiviewanimationtransition ios

4
推荐指数
1
解决办法
3204
查看次数

UIPageControl + UIAppearance

UIAppearance的文档非常差.

我想自定义UIPageController的颜色,但我无法确定要设置的属性.当我走的时候,[UIPagecontrol appearance] set我可能会得到数百个选项,所以几乎不可能弄清楚它是什么.

我认为可以使用UIAppearance代理,对吗?

谢谢

uipagecontrol ios uiappearance ios6

4
推荐指数
1
解决办法
3904
查看次数

UIView帧动画"摆动"

我有这段疯狂的代码.如何使用Core Animation为此设置动画,以便减少代码?我已经找到了一些用于做"摆动"动画的代码,但这是3D,我只是希望视图左右移动,我不想动画它在侧面弹跳.

[UIView animateWithDuration:0.1f
                 animations:^{
                     CGRect frame = tableView.frame;
                     frame.origin.x -= 4;
                     tableView.frame = frame;
               } completion:^(BOOL finished) {
                   [UIView animateWithDuration:0.1f
                                    animations:^{
                                        CGRect frame = tableView.frame;
                                        frame.origin.x += 4;
                                        tableView.frame = frame;
                                  } completion:^(BOOL finished) {
                                        [UIView animateWithDuration:0.1f
                                                         animations:^{
                                                             CGRect frame = tableView.frame;
                                                             frame.origin.x -= 4;
                                                             tableView.frame = frame;
                                                       } completion:^(BOOL finished) {
                                                             [UIView animateWithDuration:0.1f
                                                                              animations:^{
                                                                                  CGRect frame = tableView.frame;
                                                                                  frame.origin.x = 0;
                                                                                  tableView.frame = frame;
                                                                            } completion:^(BOOL finished) {
                                                                                  // Nothing
                                                                            }
                                                              ];
                                                       }
                                        ]; …
Run Code Online (Sandbox Code Playgroud)

core-animation uiviewanimation ios

4
推荐指数
1
解决办法
4431
查看次数

MagicalRecord日期解析

我有以下格式的日期:

2013-05-04T05:07:09+00:00

我正在使用MagicalRecord自动映射NSDate.据我所知,上述日期格式应符合MagicalRecord的默认日期格式:yyyy-MM-dd'T'HH:mm:ss'Z'.

我已尝试dateFormat在属性的用户信息中使用自定义条目(请参阅此文章):

yyyy-MM-ddTHH:mm:ss+Z,yyyy-MM-dd T HH:mm:ss Z,yyyy-MM-dd'T'HH:mm:ss'+'Z

但是它们都没有工作,以便正确地解析日期,nil无论设置自定义dateFormat还是使用MagicalRecord的默认格式,它都会返回.

objective-c nsdate nsdateformatter ios magicalrecord

4
推荐指数
1
解决办法
886
查看次数