画廊上的自动旋转 - willAnimateRotation ...不会被调用

时间:2010-10-25 08:10:20

标签: iphone gallery autoresize autorotate

我正在使用this

我把它放在添加图像的地方:

self.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;

我已将这些覆盖放在SlideShowViewController中:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation{
    return YES;
}

-(void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)InterfaceOrientation duration:(NSTimeInterval)duration {


}

第一个叫,但不是第二个。

我没有使用笔尖;它使用一个自定义init,它返回一个带有3个图像的self.view。

我错过了什么吗?当用户旋转iPhone时,修改此脚本以使横向照片拉伸到最大宽度的最佳方法是什么?

编辑:刚尝试将willAnimate ...添加到我的NavigationController的Root View Controller中,但是没有调用它。也许NavigationController是问题?在那种情况下,我在哪里放置willAnimate ......?或者,我如何接收并传递发送到可见viewController的消息?

编辑2:主题中的错误原因是TabBarController在IB中缺少连接(我确信在那里)。所以现在我的问题与其他一些类似问题相同 - willAnimate ...在根VC中调用,但不在推送的VC中调用。我使用的代码在库VC中淡出而不是滑入,即。它没有按下,但目前作为子视图添加到窗口 - 填满整个显示。

有关如何向子视图的控制器发送信息以设置帧的建议,我们将不胜感激,或者提供替代解决方案!

4 个答案:

答案 0 :(得分:1)

这不能解释为什么你的“willAnimateRotation ..” - 方法不会触发,而是替代图像库如何适应旋转本身。

在initWithImages中添加:

[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(didRotate:)
                                             name:UIDeviceOrientationDidChangeNotification object:nil];

添加此方法以接收通知。在didRotate中,您可以处理调整图像重新定位的大小。

- (void) didRotate:(NSNotification *)notification
{   
    UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation];

    if (orientation == UIDeviceOrientationLandscapeLeft)
    {
        NSLog(@"Landscape Left!");
    }
}

不要忘记在dealloc中取消注册通知:

[[NSNotificationCenter defaultCenter] removeObserver:self name:UIDeviceOrientationDidChangeNotification object:nil];

我是否还建议您使用UIScrollView而不是自己处理滚动和手势?

答案 1 :(得分:0)

SlideShowViewController是直接推送到导航控制器堆栈,还是其他视图的一部分?在使用导航控制器堆栈上的视图上的子视图时,UIView委托方法会变得混乱。

如果SlideShowViewController只是推送到导航控制器堆栈的其他视图的子视图,我会尝试在实际位于导航控制器堆栈的视图控制器中侦听此方法,然后调用相应的方法从那里开始使用SlideShowViewController。

答案 2 :(得分:0)

我在获取viewWillAppear和在导航控制器中调用的类似方法时遇到了类似的问题 我通过在调用root方法时手动调用它来解决 我不知道它是否与旋转相同,但您可以尝试放入根视图控制器

-(void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)InterfaceOrientation duration:(NSTimeInterval)duration {
    [super willRotateToInterfaceOrientation:toInterfaceOrientation duration:duration];
    [self.navigatioController willAnimateRotationToInterfaceOrientation:toInterfaceOrientation duration:duration];
}

答案 3 :(得分:0)

我想这个问题有点棘手,因为它是关于我特定的非基本应用设置。抱歉让赏金时间用完了,我问的那天基本上已经太晚了;)

我认为我会发布这个“没有被评论”,因为任何有同样症状的人都会这样做。

第一个是我注意到一个IBOutlet,我确信我在某一点连接不再连接(Tab Bar Controller - > tabBarController对象)。由于我绞尽脑汁并移动了一些东西来完成这项工作,这可能是因为我尝试了一些东西然后恢复备份。

解决方案的第二部分是将galleryView视图添加到tabBarController的视图而不是导航到视图。然后调用根视图控制器的shouldAuto ...和willAuto方法。

(要在旋转时隐藏标签栏和导航栏,我必须在显示图库时将其.alpha设置为0,否则当返回到导航栏时,导航到的视图部分隐藏在导航栏下。我发现没有在显示图库时隐藏状态栏的方法。)

在此之后有一个请求让画廊在详细视图中导航到另一个标签,我得到了一个棘手的错误,只有在其他标签下显示OTHER(工作)细节视图时才会自动旋转工作与新画廊。将回到解决方案,quittin时间。