通常的故事 - 我正在iOS 7下运行iOS 5/6应用程序并且导航栏行为更改导致问题.
该应用程序已经像iOS 7默认一样工作,全屏视图和视图"半透明"的半透明导航栏.问题是隐藏/取消隐藏导航栏会导致iOS 7中出现不同的行为.在iOS 5/6上隐藏/取消隐藏导航栏不会更改视图.在iOS 7上,隐藏栏可视地向上移动视图,在屏幕底部留下一个空白栏,取消隐藏栏将视图向下移动以占据整个屏幕(当然,导航栏位于顶部).
我需要继续支持iOS 5,所以我不使用自动布局,但我确实使用全屏.我有一个视图,我正在查看可缩放图像 - 因此视图控制器有一个全屏视图,其中包含一个包含imageView的scrollView.
状态栏始终隐藏.
我通过导航控制器进入视图控制器,因此有一个(黑色,半透明)导航栏位于我的全屏视图/ scrollView/imageView的顶部.
短暂延迟后,一些重叠标签会消失并隐藏导航栏单击一下即可恢复覆盖标签并取消隐藏导航栏.这适用于iOS 5/6 - 导航栏滑出屏幕顶部,露出视图/图像的顶部.
在iOS 7上,当导航栏滑出屏幕顶部时,整个视图在视觉上向上移动相应的量(即44点),在屏幕底部留下黑条.我可以通过在顶层视图上设置背景颜色并调整scrollview的大小来查看背景来看到这一点.视图的顶部确实移动到屏幕外,并且背景颜色不会在屏幕的底部(44点)上绘制.
但是,self.view.frame不会改变并保持在{0,0} 320 x高度.
当我单击以恢复叠加信息和导航栏时,视图向下移动以占据整个屏幕,半透明导航栏位于视图/图像的顶部.
我没有尝试过改变行为:更改IB视图控制器布局控件(在顶部栏下,在底栏下,调整滚动视图插图).在7.0下运行时,5.1,6.1和7.0的构建都会产生相同的结果.
self.edgesForExtendedLayout = UIRectEdgeNone
Run Code Online (Sandbox Code Playgroud)
什么也没做.使用布局增量值不会执行任何操作.在IB中,当"被视为"iOS 7和iOS 6及更早版本时,视图看起来相同.我打印出很多调试信息,但当视图移动"屏幕外"时,视图(或滚动视图)似乎没有任何变化.
显示覆盖信息的代码(在首次显示视图和单击时运行)是:
- (void) showOverlayInfo {
self.navigationController.navigationBar.barStyle = UIBarStyleBlack;
[[[self navigationController] navigationBar] setTranslucent:YES];
[[self navigationController] setNavigationBarHidden:NO animated:NO];
overlayInfoHidden = NO;
overlayInfoFading = NO;
self.infoButton.hidden = NO;
self.infoButton.alpha = 1;
self.descriptionLabel.hidden = NO;
self.descriptionLabel.alpha = 1;
}
Run Code Online (Sandbox Code Playgroud)
隐藏覆盖信息的代码是:
- (void) hideOverlayInfo {
overlayInfoHidden = YES;
overlayInfoFading = NO; …Run Code Online (Sandbox Code Playgroud) 我正在尝试调试在iOS 5.1下运行的问题,当我在调试器中停止获取错误并尝试使用调试器打印内容时,我收到消息:
错误:警告:在声称捕获Objective-C对象指针的上下文中停止,但"self"不可用; 假装我们处于一般背景下
劳驾?有人知道我在这里做了什么吗?
代码太复杂了,任何人都不希望看到它 - 我大多希望有人可以告诉我调试器消息的含义.
这曾经只是间歇性地失败但现在大多数都失败了.操作一般(或可能总是)在我第一次在iOS 5.1中尝试时,偶尔在第一次之后,并且显然总是在iOS 6中工作.
如果它有助于了解一般上下文...我正在尝试将一个刚编写的对象添加到ALAssetsGroup,因此这是在非UI线程上的完成块中.对于完成块,我有一个看似合理的堆栈回溯.失败是因为存储的ALAssetsGroup不再具有有意义的值 - 或者说它的NSLog知道它是ALAssetsGroup对象.这个值在一个地方分配(并记录,所以我跟踪它),我可以看到键值观察的初始分配,我不认为它是以KVO-sorta方式改变的.
我看到UIPageViewController使用Scroll转换与之间的不同行为PageCurl.PageCurl以我期望的方式工作但是当使用Scroll-ing时,我有时会看到额外的(荒谬的)调用viewControllerBeforeViewController:,viewControllerAfterViewController:
有没有人认识到这种额外的数据源调用模式?
我正在显示一系列图像,我可以从序列的任何地方开始.当使用Scroll转换但不是PageCurl时,如果我移动到"右",则显示初始页面后,我得到3个DataSource调用而不是我期望的单个调用.对于下面的示例运行,我开始在我的索引值为3.当我滑动以移动到"下一个"图像时,我希望viewControllerAfterViewController:在索引3上获得单个调用以获得索引4.如果我运行测试我得到两个额外的调用:一个用于索引3(即2),一个用于索引4(即5).输出是:
2013-04-19 12:37:33.964 Clouds[496:907] Page 3 - viewControllerAfterViewController called on this index
2013-04-19 12:37:33.988 Clouds[496:907] Page 3 - viewControllerBeforeViewController called on this index
2013-04-19 12:37:34.010 Clouds[496:907] willTransitionToViewControllers to indices
2013-04-19 12:37:34.014 Clouds[496:907] Page 4
2013-04-19 12:37:34.461 Clouds[496:907] Page 4 - viewControllerAfterViewController called on this index
Run Code Online (Sandbox Code Playgroud)
所有这些之后显示的视图确实是索引4的视图.在第一次转换之后,UIPageViewController似乎表现得像我期望的那样.当我使用PageCurl转换时,它总是按照我期望的方式运行,而且我没有得到任何这些无关的调用.
实际产生输出的代码是:
- (void)viewDidLoad
{
[super viewDidLoad];
self.pageViewController = [[UIPageViewController alloc] initWithTransitionStyle:UIPageViewControllerTransitionStyleScroll navigationOrientation:UIPageViewControllerNavigationOrientationHorizontal options:nil];
self.pageViewController.delegate = self;
self.pageViewController.dataSource = self;
CloudImageVC *startingViewController …Run Code Online (Sandbox Code Playgroud) CGImageRef使用ARC 管理内存的规则有哪些?也就是说,有人可以帮我找到正确的文档吗?
我从照片库中获取图像并创建一个UIImage显示:
CGImageRef newImage = [assetRep fullResolutionImage];
...
UIImage *cloudImage = [UIImage imageWithCGImage:newImage scale:scale orientation:orientation];
Run Code Online (Sandbox Code Playgroud)
我需要做CGImageRelease(newImage)什么?
我得到内存警告,但它不似乎是我还没有发布对象的逐渐积累,我没有看到有任何仪器泄漏.我很困惑.
在iOS 5和/或iOS 6中,是否有一种编程方式来获取已分配内存的大小(总数或仅数据)?
我遇到了内存问题,我想了解一些正在进行的并行图像处理的内存含义.