11

このフォーラムで「アニメーションが機能しない場合のUIView内のUIButton」というトピックに対する回答を提供する多くの質問を見てきましたが、次のような回答を試した後

a) UIViewAnimationOptionAllowUserInteraction to the options
b) subView.setUserInteractionEnabled = YES
c) [button addTarget:self action:@selector(buttonPressed) forControlEvents:UIControlEventTouchUpInside];

それらのどれも私のために働いていません:-(

これがシナリオです。アプリはランドスケープモードであり、menuViewと呼ばれるUIViewはx = 480、y=0に配置されます。その高さ=200および幅=150。だから、右上のボタンをタップすると、次のコードが実行されます

- (IBAction)showMenu {
    [menuView setUserInteractionEnabled:YES];
    [optionsButton setUserInteractionEnabled:YES];
    [UIView animateWithDuration:0.5 delay:0.0 options:UIViewAnimationCurveEaseOut |  UIViewAnimationOptionAllowUserInteraction
                     animations:^{
                         self.view.frame = CGRectOffset(self.view.frame, 0, 200);
                     }
                     completion:NULL];
}

出力?:ビューは表示されていますが、menuView内のoptionsButtonはクリックできません。イベントに接続し、NSLog(@ "オプションボタンがクリックされました")を実行しましたが、何も起こりません:-(

私が間違っていることを教えてください。

更新:「menuView」であるサブビューをself.view内に配置し、実行してoptionsButtonをクリックすると、NSLogメッセージが表示されます。menuViewのorigin.xを480以上に指定した場合のみ、機能しません。

4

4 に答える 4

29

UIButtonが表示されている場合、そのuserInteractionEnabled(デフォルトではYES!)が設定されており、階層全体でのスーパービューのuserInteractionEnabledはYESです。これを操作できるはずです。

アニメーションによってuserInteractionEnabledプロパティが変更されることはありません。だからあなたがそこでしていることは単に不必要です。アニメーション中にインタラクションを有効にしようとすると、それは別の話であり、アニメーションメッセージに渡されるオプションにすぎません。

したがって、それが問題ではない場合(おそらく問題ではない場合)、スーパービューのフレームの1つがUIButtonをトリミングしていると思います。

これで、UIButton(または任意のUIView)がUIViewのフレームの外側にある場合でも、clipsToBoundsがスーパービューに設定されていない限り、表示されたままになります。

そして、その状況の結果は次のとおりです。あなたは私を見ることができますが、あなたは私に触れることができません。

于 2013-03-03T12:06:31.793 に答える
8

私の場合、含まれているビューの高さに関する制約がないため、ビューの高さが0になりました。ボタンはビューの下に表示されていましたが、タッチできませんでした。

于 2013-11-27T19:38:19.050 に答える
2

私にとっては、アニメーションコード自体の見落とされた間違いがすべてでした。新しい高さを呼び出す場所では、実際に新しい幅を呼び出し、新しい幅を呼び出す場所では、実際に新しい高さを呼び出していたため、UIViewは非常に長く、非常に狭くなり、すべてのコンテンツが中央に押し出されました。ビューの範囲外のビューの範囲。

  • UIViewsの背景色を赤に変更して、アニメーション化先を実際に確認できるようにします。

  • UIViewが別のビュー内にある場合は、オンにしclipSubviewsて、内で実際に有効になっているものだけが表示されるようにしますsubView

  • プロジェクトを実行します。

UIViewが通常の高さと幅でない場合は、アニメーション呼び出しのコードを見落としている可能性があります。

x, y, width, heightアニメーションコード内で正しい順序で表示されていることを確認してください。

于 2016-06-01T14:54:38.567 に答える
1

私の場合、アニメーション化されたトランジションはまだ完了していないようです。メソッドcompleteTransition:Boolの最後 に置くのを忘れました。animateTransition:context

于 2015-08-03T06:53:53.240 に答える