uiimageviewを「フリック」する方法は?
-
20-08-2019 - |
質問
ユーザーに画面全体に「フリック」できるようにしたいというuiviewがいくつかあります。彼らは巻き物のビューではありません。ラスター画像(PNG)が含まれています。誰かが私を始めるのを助けるためにいくつかのサンプルコードなどを指してもらえますか? 「フリック」(「ナッジ」またはドラッグアンドドロップ)を検出し、「フリック」の方向にビューをオフにするのに役立つ「moveme」よりも少しヘビー級よりも少しヘビー級?
OpenGLはおそらくやり過ぎです。可能であれば、コアグラフィック/アニメーションの領域にとどまりたいと思います。
解決
タッチを検出するために、ビューコントローラーでは、ToucheSbeganとToucheded Methodを使用してTouchesbeganのタッチを保存できます。タッチが左または右にある量以上移動した場合、それはフリックであり、左または右。
他のヒント
これを実装するEasyeistの方法は、ページングを有効にしてUiscrollviewコンテナにあなたの意見を入れ、すべての「フリック」アクションを心配させることだと思います。私にとってはうまくいきます。
いくつかの追加の努力があっても、画像が怠zyなロードを持っていることができます。
Nazgul42の回答を取得し、2つの言及されたイベント間の時間もチェックすることで、これを簡単に達成できると思います。その後、短い時間と長距離の組み合わせをフリックと解釈できます。また、両方のタッチイベントポイントの両方を計算することにより、フリックの方向を決定できます。
あなたが持っていると仮定します UIView
呼び出されました aView
と2 UIImageViews
, page1
と page2
. 。あなたが持っていると仮定します page1
すでにサブビューとして aView
, 、このコードは反転します page1
に page2
:
[UIView beginAnimations:@"someId" context:nil];
[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft forView:aView cahe:YES];
[page1 removeFromSuperview];
[aView addSubview:page2];
[UIView commitAnimations];
ここでスレッドを見つけましたが、この方法は私を心配しています -
http://discussions.apple.com/message.jspa?messageid=7862186
スピードやタイムスタンプを考慮しません。最後のイベントの更新以来の距離。 Appleがイベントの更新のFreqcency/Granularityを変更した場合、このコードは壊れる可能性があります。
使用してみてください UIPanGentureRecognizer
サンプルコード:
UIPanGestureRecognizer *imageGesture = [[UIPanGestureRecognizer alloc]
initWithTarget:self
action:@selector(imageDragged:)];
[imageView1 addGestureRecognizer:imageGesture];
それから
- (void)imageDragged:(UIPanGestureRecognizer *)gesture{
UIImageView *imageView = (UIImageView *)gesture.view;
CGPoint translation = [gesture translationInView:imageView];
imageView.center = CGPointMake(imageView.center.x + translation.x,
imageView.center.y + translation.y);
imageView2.center = imageView.center;
imageView3.center = imageView.center;
[gesture setTranslation:CGPointZero inView:imageView];}