使用presentViewController时有趣的UIScrollView

时间:2013-10-29 09:35:09

标签: ios iphone uiviewcontroller uiscrollview zoom

要点: 我有一个带可缩放内容的UIScrollView。如果内容没有被缩放并且我现在是ViewController,那么当我解雇ViewController时一切都很好。但是,如果我缩放内容然后presentViewController,当我解除ViewController时,内容和UIScrollView都是古怪的。欢迎任何帮助,这是一个可怕的错误......谢谢!

测试项目: 这里可以找到一个简单的测试......

http://twostatesaway.com/ModalWithScrollViewTEST.zip

或在这里

https://drive.google.com/file/d/0B0pG5vRVzBTzdkVzdEtkdmVjdDA/edit?usp=sharing

屏幕截图:

屏幕1:一切都很好。我可以显示模式一百万次,内容将在解除模态后按预期工作

屏幕2:放大内容。

屏幕3:当我点击presentViewController的按钮时,内容会在ViewController(黑色)出现时向右移动。

屏幕4:模态在屏幕上。

屏幕5:当我关闭ViewConroller时,内容很有趣,亮绿色视图似乎恢复正常,但按钮保持在变焦位置,仍然向右移动。

屏幕6:另一个有趣的事情是,现在我可以比以前更多地缩小。最小缩放设置为1.0,但现在看来它似乎不起作用。

enter image description here

2 个答案:

答案 0 :(得分:0)

试试这种方式......

1)从- (IBAction)openModal:(id)sender&删除代码把它弄空白。

2)在故事板中,将secondViewController类设为ModalViewController,如下所示。

enter image description here

3)将线从按钮拖到第二个视图&使用segue作为模态,如下所示。

enter image description here

更新回答

1)清除viewDidLoad方法。

2)在ViewWillAppear method.

中写下以下代码
-(void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
    self.scrollView.delegate = self;
    self.scrollView.minimumZoomScale = 1.0;
    self.scrollView.maximumZoomScale = 5.0;
    //self.scrollView.contentSize=CGSizeMake(320, 200);
    [self.scrollView setZoomScale:self.scrollView.minimumZoomScale];
}

答案 1 :(得分:0)

这里接受的工作是在模态出现时捕获缩放和contentOffset,然后在视图再次出现时设置属性...

//// Capture values
-(void)viewWillDisappear:(BOOL)animated
{
    zoomedScale = self.scrollView.zoomScale;
    contentOffsetTemp = self.scrollView.contentOffset;
}

//// This prevents the content from getting messed up (thanks user1673099)
-(void)viewDidDisappear:(BOOL)animated
{
    [self.scrollView setZoomScale:self.scrollView.minimumZoomScale];
}

//// Then reassign them values
-(void)viewWillAppear:(BOOL)animated
{   
    self.scrollView.zoomScale = zoomedScale;
    self.scrollView.contentOffset = contentOffsetTemp;
}