2016-10-12 6 views
0

画面に常に表示されるアプリケーション用のフローティングビューを作成しました。UIViewの半分を画面外にする

ここでは、3〜4秒間インタラクティブに表示されているときに、画面の半分を画面外にしたいと考えています。私はNSTimerを使ってこのビューを隠すべきだと思いますが、それは問題ではありません。

このビューのorigin.xを画面外に移動するにはどうすればよいですか?

CGRect screenRect = [[UIScreen mainScreen] bounds]; 
CGFloat screenX = screenRect.origin.x; 
[self setFrame:CGRectMake(-screenX - size.width, 0, size.width, size.height)]; 

しかし、それは動作しません:私はこのように私のinitWithSuperViewにフレームを設定しようとしました。希望の結果を得るにはどうすればいいですか?詳細については、下の画像を参照してください。

enter image description here

答えて

1

あなたはこれに似たUIViewのアニメーションを使用することができます:あなたはUIViewののx制約にセットアップNSLayoutConstraint

dispatch_async(mainQueue, ^{ 
    __weak __typeof(self) weakSelf = self; 
    [UIView animateWithDuration:3.f animations:^{ 
     // change uiview frame here 
     weakSelf.frame = hiddenFrame; 
    } completion:^(BOOL finished) { 
     // setup completion 
     [weakSelf.view layoutIfNeeded]; 
    }]; 
}); 

を可能とするとき、負の値で更新あなたが必要です。

+0

なぜdispatch_async - mainQueue? –

+0

@Ahmad UI操作はメインスレッドでのみ提供する必要があるためです。 –

+0

:) animateWithDurationはメインスレッドをブロックしません。それは分離されたキューにイメージをダウンロードするのではなく、その結果をメインスレッドのUIコンポーネントに反映させることです。自分で試してみてください。 –

関連する問題