目标 C:使用 UIScrollview 改变方向

Posted

技术标签:

【中文标题】目标 C:使用 UIScrollview 改变方向【英文标题】:Objective C: Orientation Change With UIScrollview 【发布时间】:2012-04-30 08:54:37 【问题描述】:

我正在尝试使用 UIScrollView (pagingEnabled) 制作一个应适应设备界面方向的应用。

为此,我制作了两个加载了 UIImageviews 和 UIButtons 的 UIScrollViews 和动画 (CA)。一个用于纵向,另一个用于横向(您将在我的代码中看到它)。

现在我的问题是每当我旋转设备时,是的!它会响应方向变化,但会返回第一页。

好的图片这个...您已经在纵向滚动视图的第 10 页上,然后当您切换到横向时,它又在第一页上。

我希望解释清楚。

而且...当我旋转它时它会在 iPad 上崩溃。

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation

    return (interfaceOrientation == UIInterfaceOrientationPortrait || interfaceOrientation == UIInterfaceOrientationPortraitUpsideDown || interfaceOrientation == UIInterfaceOrientationLandscapeRight || interfaceOrientation == UIInterfaceOrientationLandscapeLeft);


- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
    [super willRotateToInterfaceOrientation:toInterfaceOrientation duration:duration];
    if(toInterfaceOrientation == UIInterfaceOrientationPortrait || toInterfaceOrientation == UIInterfaceOrientationPortraitUpsideDown)
        //self.view = portraitView;
        [self changeTheViewToPortrait:YES andDuration:duration];

    
    else if(toInterfaceOrientation == UIInterfaceOrientationLandscapeRight || toInterfaceOrientation == UIInterfaceOrientationLandscapeLeft)
        //self.view = landscapeView;
        [self changeTheViewToPortrait:NO andDuration:duration];
    


- (void) changeTheViewToPortrait:(BOOL)portrait andDuration:(NSTimeInterval)duration

    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationDuration:duration];

    if(portrait)
        //change the view and subview frames for the portrait view
        [self forPortrait];
        [self removeMainSVLContents];
    
    else   
        //change the view and subview  frames for the landscape view
        [self forLandscape];
        [self removeMainSVPContents];
    

    [UIView commitAnimations];

“forPortrait”中的内容与“forLandscape”中的内容相同,它们只是具有不同的框架,并且它也有不同的图像,可以适应纵向和横向的屏幕。

【问题讨论】:

【参考方案1】:

在动画的时候使用**scrollRectToVisible:animated:**方法来显示或者停留在想要滚动视图的地方 可能对你有用。

【讨论】:

以上是关于目标 C:使用 UIScrollview 改变方向的主要内容,如果未能解决你的问题,请参考以下文章

UIScrollView contentOffset 在方向更改后损坏

目标 C:在 UIScrollView 上触摸绘图

目标 C:检测 UIScrollView 上的触摸事件

无法单击 UIScrollview 目标上的按钮 - C

目标 C:在 UIScrollView 中触摸时绘制(写入)

ImageView 不在 UIScrollView 中显示(目标 C)