簡體   English   中英

AnimateWithDuration禁用UIView上的userInteraction

[英]AnimateWithDuration disables userInteraction on UIView

我在其中一個視圖的頂部添加了一個子視圖,並對其進行了動畫處理,從而使其通過使用animateWithDuration在屏幕的底部開始並在屏幕的頂部結束。 一切正常,除了animateWithDuration完成后,上方的視圖沒有用戶交互,而下方的視圖仍然具有用戶交互。 如果我刪除animateWithDuration ,而只是在其正常位置啟動子視圖,則用戶交互也會按我期望的方式工作,這就是為什么我認為animateWithDuration是問題所在。

這是我的代碼:

UIViewController *viewController = [[CCouponDetailViewController alloc] init];
[[viewController view] setBounds:CGRectMake(0, ([UIScreen mainScreen].bounds.size.height * -1), viewController.view.bounds.size.width, viewController.view.bounds.size.height)];
[self addChildViewController:viewController];
[self.view addSubview:viewController.view];

CGRect newFrame = viewController.view.frame;
newFrame.origin.x = 0;
newFrame.origin.y = ([UIScreen mainScreen].bounds.size.height * -1);

[UIView animateWithDuration:1.0
     animations:^{
         viewController.view.frame = newFrame;
     }
     completion:^(BOOL finished){
         [viewController didMoveToParentViewController:self];
     }
];

我有另一個問題(只是好奇而已,並不是很重要),就是在newFrame中,我將y設置為與最初設置邊界時相同的東西,但是它會移動。 我本來希望newFrame要求ay值為“ 0”,但是當我這樣做時,什么也沒發生。 只是想知道為什么。

我實際上會退后一步...

“我還有一個問題(不是很重要,只是好奇)是,在newFrame中,我將y設置為與最初設置邊界時相同的東西,但是它仍然可以移動。我希望newFrame要求ay值表示“ 0”,但是當我這樣做時,什么也沒發生。只是想知道為什么會這樣。”

對於您來說,這實際上是一個非常重要的問題,因為它與您的代碼為何無法正常工作有很大關系。 您誤解了一些非常重要的概念。

首先, UIViewbounds完全確定其相對於自身的位置。 frame確定UIView在其父視圖中的位置。 在您的代碼中,您最初是在設置視圖的bounds ,而不是frame -

[[viewController view] setBounds:CGRectMake(0, ([UIScreen mainScreen].bounds.size.height * -1), viewController.view.bounds.size.width, viewController.view.bounds.size.height)];

-因此,您根本不是在確定視圖在其父視圖中的位置,而只是確定與它本身的關系。

本質上,您最終得到一個帶有0x0框架的CCouponDetailViewController視圖,但是由於您未指定要讓UIView裁剪其子視圖,因此CCouponDetailViewController視圖的部分實際上不在其視圖頂部,而是可見的並懸在UIView的邊界上。 之所以不能選擇它們,是因為它們實際上不在UIView

因此,要解決此問題,請設置UIView的初始框架,而不要設置邊界 (我正在嘗試按照您的UIView將初始框架編輯為從屏幕底部開始。我不知道x的高度-順便說一句,您正在嘗試做的事情...):

[[viewController view] setFrame:CGRectMake(0, [UIScreen mainScreen].bounds.size.height, viewController.view.bounds.size.width, viewController.view.bounds.size.height)];

其次,您錯誤地設置了新框架。 您不能通過以下方式設置CGRect:

CGRect newFrame = viewController.view.frame;
newFrame.origin.x = 0;
newFrame.origin.y = ([UIScreen mainScreen].bounds.size.height * -1);

而是使用CGRectMake設置(同樣,我編輯了y值,以使視圖最終像您嘗試的那樣顯示在屏幕頂部):

CGRect newFrame = CGRectMake(0, 0, viewController.view.frame.width, viewController.view.frame.height);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM