Tag: objective c

iOS6的UICollectionView和UIPageControl – 如何获得可见的单元格?

在学习iOS6新function时,我得到了一个关于UICollectionView的问题。 我目前正在testingstream布局和滚动方向设置为水平,滚动和分页启用。 我已经将其大小设置为与我的自定义单元格完全相同,因此它可以一次显示一个单元格,通过向侧面滚动,用户将看到其他现有单元格。 它完美的作品。 现在我想添加和UIPageControl到我做的集合视图,所以它可以显示哪个单元格是可见的,有多less个单元格。 构build页面控件相当简单,定义了frame和numberOfPages。 问题标题所指出的问题是如何获取当前在集合视图中可见的单元格,以便可以更改页面控件的当前页面。 我已经尝试委托方法,如cellForItemAtIndexPath,但它是加载单元格,而不是显示它们。 didEndDisplayingCell在单元格不再显示时触发,与我所需要的相反。 它似乎-visibleCells和-indexPathsForVisibleItems,集合视图方法,是我的正确select,但我遇到了另一个问题。 什么时候触发他们? 在此先感谢,希望我能让自己清楚明白,以便你们能理解我!

UIViewControllerHierarchyInconsistency当试图呈现一个模态视图控制器

尝试用下面的代码展示一个模态视图控制器 MapViewController *mapView = [[MapViewController alloc] initWithNibName:@"MapViewController" bundle:nil]; mapView.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal; [self.navigationController presentModalViewController:mapView animated:YES]; [mapView release]; 继续收到以下错误 'UIViewControllerHierarchyInconsistency', reason: 'A view can only be associated with at most one view controller at a time! View <UIView: 0x1ed815a0; frame = (0 20; 320 460); autoresize = W+H; layer = <CALayer: 0x1ed81600>> is associated with <UIViewController: 0x1ed835a0>. […]

iPhone:UITableView CellAccessory复选标记

在iPhone应用程序单击表格视图单元格我想要显示表格视图单元格附件types复选标记为didSelectRowAtIndexPath上我写代码 if(indexPath.row ==0) { [tableView cellForRowAtIndexPath:indexPath].accessoryType=UITableViewCellAccessoryCheckmark; } 并显示复选标记。 但在我的情况下,我必须允许用户一次只检查单元格意味着如果用户select其他行,那么该行应该检查,以前检查应该是未选中 我怎样才能做到这一点?

NSTimeInterval格式

我想采取我的NSTimeInterval并格式化为一个string00:00:00(小时,分钟,秒)。 做这个的最好方式是什么?

Objective-C浮点四舍五入

我怎样才能将一个浮点数四舍五入到Objective-C中最接近的整数: 例: float f = 45.698f; int rounded = _______; NSLog(@"the rounded float is %i",rounded); 应该打印“圆形的浮标是46”

自定义animation从一个UICollectionViewLayout切换到另一个?

作为一个testing,我做了一个布局,以垂直线显示单元格,另一个以水平布局显示单元格。 当我调用[collectionView setCollectionViewLayout:layout animated:YES]; 它在两个位置之间非常干净地animation。 现在我想要做的是在最终到达目的地之前,所有的视图都进行了一些旋转,扭曲和旋转(可能使用CAKeyframeAnimations),但是我找不到一个合适的位置来吸引它。 我尝试了UICollectionViewLayoutAttributes包含一个animation属性,然后设置这些animation重写我使用的UICollectionViewCell applyLayoutAttributes:方法。 这工作…除了布局过渡完成后才出现。 如果我想使用这个,我必须有布局不改变对象的当前位置,只有在它达到这个应用属性代码的一部分,这似乎很多工作… … – 或者,我可以UICollectionView并覆盖setCollectionViewLayout:animated: UICollectionView但是这也看起来像是很多状态来保持布局之间。 这两种select都不是正确的,因为有一种简单的方法可以在布局中增加/删除单元格。 我觉得应该有一些类似的布局之间的animation挂钩。 有谁知道最好的方法来获得我期望完成的?

有没有办法清除UIImage类使用的caching?

众所周知,使用imageNamed:方法加载图像时,UIImage会caching其图像数据。 从苹果文档: https : //developer.apple.com/documentation/uikit/uiimage/1624146-imagenamed imageNamed: 讨论 :此方法在系统caching中查找具有指定名称的图像对象,并返回该对象(如果存在)。 如果匹配的图像对象不在caching中,则此方法从指定的文件加载图像数据,将其caching ,然后返回结果对象。 因此,在用imageNamed:加载几个图像之后imageNamed:我注意到内存使用量的大量增加,并且即使在加载图像的控制器被解除分配之后内存仍被保持使用。 (至less在我分配同一个控制器的时候没有再增加) 这让我想知道是否有任何方法可以在应用程序生命周期的任何给定时间以编程方式清除UIImage使用的caching,甚至控制一些caching参数(例如,可以使用的最大内存) 我知道我可以通过使用initWithData , imageWithData , imageWithContentsOfFile或任何其他初始化工具而不是imageNamed来轻松解决此问题,但是在使用多个图像(如UITableView内部)时,需要此caching行为。 任何想法如何做到这一点? 编辑:在一些答案之后,我只是想说清楚,需要做某件事情和有可能做某事之间有巨大的差距。 正如我所指出的那样,我知道操作系统为我处理caching,我只是想看看iOS SDK所施加的限制。

使Objective-C类看起来很美

我想问你们所有的意见在目标C的代码气味,特别是cocoa触摸。 我正在制作一个相当复杂的游戏,并且即将开始伟大的12月重构。 我的很多课程,特别是模型,充满了处理内部商业逻辑的方法; 我将把这些隐藏在一个私人的类别中,在对抗大量头文件的战争中。 这些私有类别包含了大量的声明,这让我感到不安…就像Objective-C出来让我对所有这些方法感到内疚。 我重构得越多(一件好事!),就越需要保持所有这些重复(不太好)。 这只是感觉不对。 像Ruby这样的语言,社区非常注重非常简短,清晰,美丽的方法。 我的问题是,Objective C(特别是Cocoa Touch),你的方法有多长,你的控制器有多大,以及你们所有项目中你发现每种types的方法有多less? 在目标C中,有什么特别好的,美丽的由短方法构成的类的例子,还是不是语言文化的重要组成部分? 披露:我正在阅读“小小的Schemer”,这应该解释我的悲伤,重新:客观C.

在自UIViewController调用的非保留完成中引用self时,weakSelf / strongSelf舞真的有必要吗?

说我在UIViewController子类中有以下方法: – (void)makeAsyncNetworkCall { [self.networkService performAsyncNetworkCallWithCompletion:^{ dispatch_async(dispatch_get_main_queue(), ^{ [self.activityIndicatorView stopAnimating]; } }); }]; } 我知道块内的self引用导致UIViewController实例被块保留。 只要performAsyncNetworkCallWithCompletion不会将该块存储在我的NetworkService的属性(或ivar)上,我是否认为没有保留周期? 我意识到上面的这个结构将导致UIViewController被保留,直到performAsyncNetworkCallWithCompletion完成,即使它是由系统提前发布的。 但它可能(甚至可能?)系统将释放我的UIViewController 在所有 ( iOS 6pipe理UIViewController的支持CALayer内存的方式更改后 )? 如果有一个原因,我必须做的“自我/自我舞蹈”,看起来是这样的: – (void)makeAsyncNetworkCall { __weak typeof(self) weakSelf = self; [self.networkService performAsyncNetworkCallWithCompletion:^{ typeof(weakSelf) strongSelf = weakSelf; if (!strongSelf) { return; } dispatch_async(dispatch_get_main_queue(), ^{ [strongSelf.activityIndicatorView stopAnimating]; } }); }]; } 但是我觉得这很丑陋,如果没有必要,我想避免它。

从日,月和年生成NSDate

我试图从一个月和一年(所有的整数格式)生成一个NSDate。 现在我的尝试是这样的: NSCalendar *calendar = [NSCalendar currentCalendar]; NSDateComponents *components = [[NSDateComponents alloc] init]; NSNumber *day = [dataSource valueForKey:@"day"]; NSNumber *month = [dataSource valueForKey:@"month"]; NSNumber *year = [dataSource valueForKey:@"year"]; [components setDay:[day intValue]]; [components setMonth:[month intValue]]; [components setMonth:[year intValue]]; NSDate *_date = [calendar dateFromComponents:components]; 但是,当日= 24,月= 8,年= 2011时, _date输出以下内容: 0168-07-25 04:56:02 +0000 我一定在做一些可怕的错误,但我不知道是什么。 任何人都知道可能会发生什么?