2014-03-06 23 views
0

在我的項目中,我將有兩個視圖控制器,一個在底部(這是我的圖中的視圖控制器1)中的一個大的UIView子視圖,當用戶點擊這個UIView時,它會向上移動以顯示第二個視圖控制器的視圖。這與Google Maps for iOS中的興趣點視圖非常相似。當你搜索了一個地方的時候,它會在屏幕的底部顯示一個小視圖,然後在屏幕底部進行擴展以填充屏幕 - 這正是我期望做的。如何讓一個UIViewController的UIView以模態方式呈現,總是出現在屏幕的底部?

所以我的問題是,什麼是最好的方式去實現呢?最終,它似乎很像呈現一個UIViewController模式,除了它的UIView總是存在,雖然大小不同。

謝謝

enter image description here

enter image description here

+0

不能成爲模態視圖,因爲您將失去前一視圖的交互作用,再加上iPad上的彈出窗口以外的任何視圖,視圖控制器將全屏顯示。考慮在同一個視圖控制器上創建一個子UIView。使用手勢識別器來控制動作。 –

回答

1

我不認爲你會需要兩個單獨的視圖控制器。您只需在UIViewController中自定義UIScrollView即可。

首先,你需要設置你的scrollView的內容大小。然後,您需要防止UIScrollView滾動,因爲您不希望它滾動。

self.scrollView =[[UIScrollView alloc] initWithFrame:[UIScreen mainScreen].bounds]; 
    self.scrollView.delegate = self; 
    self.scrollView.contentSize = CGSizeMake(320, 568 + x ); // x represents the height of white screen in your first view controller. 
    self.scrollView.bounces = NO; 
    self.scrollView.scrollEnabled = NO; 

其次,你添加一個UITapGestureRecognizerUIView,將需要在屏幕上顯示完全。下面是一段代碼,你可以通過改變你的UIScrollViewcontentOffset使用

UITapGestureRecognizer *tapGestureRecognizer = 
     [[UITapGestureRecognizer alloc] initWithTarget:self 
               action:@selector(tapped:)]; 
tapGestureRecognizer.numberOfTapsRequired = 1; 
[view addGestureRecognizer:tapGestureRecognizer]; 

最後,你可以實現tapped方法在屏幕上顯示全新UIView。不要忘記消失導航欄。所以,

- (void)tapped{ 
    self.navigationController.navigationBarHidden = YES; 
    [self.scrollView setContentOffset:CGPointMake(0,view1.frame.origin.y) animated:YES]; 
} 

那麼,最後,你完全顯示你的第二個視圖在屏幕上。假設您使用的iPhone> 5,但我可以使用靜態值,但您可以根據您運行的設備使用高度的動態值。別忘了在第二個視圖中輸入setUserInteractionEnabled

我的錯誤我認爲你不想導航欄,但沒有什麼大不了的,只是你需要改變setContentOffset的y值而不使用navigationBarHidden屬性。

+0

太好了,謝謝。我會在週末試試這個,然後我會來接受這個答案。 –

+0

@mMo,你嘗試過嗎? – limon

+0

今天試過了,目前運行良好,非常感謝! –

1

我只想用一個單一的視圖控制器,使下部視圖它的一個子視圖。當您在主視圖中檢測到水龍頭時,可以向上滑動底部視圖並根據需要調整兩個視圖的大小和位置。

相關問題