私はインターフェイスの上部(ステータスバーの下)に、その下部だけが表示されているuiviewを持っています。ビューをタッチしてプルダウン
実際、ボタンをタップするだけでなく、ネイティブiOSの通知センターなどのドラッグで完全に表示されるように、赤色の表示をスライドしたいと考えています。
uiviewを完全に表示できるように「タッチ&プルダウン」するにはどうすればよいですか?
私はインターフェイスの上部(ステータスバーの下)に、その下部だけが表示されているuiviewを持っています。ビューをタッチしてプルダウン
実際、ボタンをタップするだけでなく、ネイティブiOSの通知センターなどのドラッグで完全に表示されるように、赤色の表示をスライドしたいと考えています。
uiviewを完全に表示できるように「タッチ&プルダウン」するにはどうすればよいですか?
UIView
のサブクラスを作成します。
touchesBegan:withEvent
とtouchesMoved:withEvent
を上書きします。
touchesBegan
では、おそらく視覚的に変更して、ユーザーが視界に触れていることを知ることができます。 touchesMovedで は、現在のタッチ位置と前回のタッチ位置(ダウンドラッグを検出またはバックアップドラッグ)との差を計算する [[touches anyObject] locationInView:self]
と[[touches anyObject] previousLocationInView:self]
を使用します。
カスタム図面の場合は、[self setNeedsDisplay]
と呼び出して、ビューに再描画を指示します(drawRect:(CGRect)rect
メソッド)。
注:これは、このビューでは複数のタッチが使用されていないことを前提としています。
はあなただけTouchesBegin
とTouchesEnded
メソッドを使用する必要がiPhone App: implementation of Drag and drop images in UIView
に私の答えを参照してください。この例では、CGPoint
の使用方法を示しましたが、その代わりにsetFrame
またはdrawRect
を使用してみる必要があります。
もCGPoint
からの高さを取るとすぐTouchesMoved
メソッドが呼び出されたとして、あなたはsetFrame
またはdrawRect
使用する必要があります(わからないのが、これまで、主にsetFrameを働きます)。
ドラッグアンドドロップの回避策を見つける必要はありません。 UIScrollViewは、タッチでリッスンすることでパフォーマンスを損なうことなく実行できます。
@interface PulldownView : UIScrollView
@end
@implementation PulldownView
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (!self) {
return self;
}
self.pagingEnabled = YES;
self.bounces = NO;
self.showsVerticalScrollIndicator = NO;
[self setBackgroundColor:[UIColor clearColor]];
double pixelsOutside = 20;// How many pixels left outside.
self.contentSize = CGSizeMake(320, frame.size.height * 2 - pixelsOutside);
// redArea is the draggable area in red.
UIView *redArea = [[UIView alloc] initWithFrame:frame];
redArea.backgroundColor = [UIColor redColor];
[self addSubview:redArea];
return self;
}
// What this method does is to make sure that the user can only drag the view from inside the area in red.
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
{
if (point.y > height)
{
// Leaving useless touches to the views under it.
return nil;
}
return [super hitTest:point withEvent:event];
}
@end
どのように使用するには:
1 PulldownViewのインスタンスを初期化します。
2. [addSubview:]を使用して、表示するコンテンツをインスタンスに追加します。
3.赤で領域を非表示にします。
[pulldownView setContentOffset:CGPointMake(0, heightOfTheView - pixelsOutside)];
これは簡単な例です。ドラッグ可能な領域の下部にタイトル付きのボタンバーを追加してクリックアンドドロップを実装するか、または呼び出し側がその位置を変更するためにインタフェースにメソッドを追加するなど、任意の機能を追加できます。
これは、必要だった。ありがとう! – bcattle
Will - (void)pan:(UIPanGestureRecognizer *)ジェスチャーは仕事をしますか? – Alby
はい、それを使用している間はさらに注意する必要があります...あなたは適切なコントロールや他のものを定義する必要があるので...それも良いです...しかし、あなたはTouchesbeginとTouchesEndedを使用している場合...あなたは単純にインターフェイスビルダーでIBOutletsを与えることができます... – DShah