2011-12-31 18 views
5

私はインターフェイスの上部(ステータスバーの下)に、その下部だけが表示されているuiviewを持っています。ビューをタッチしてプルダウン

実際、ボタンをタップするだけでなく、ネイティブiOSの通知センターなどのドラッグで完全に表示されるように、赤色の表示をスライドしたいと考えています。

uiviewを完全に表示できるように「タッチ&プルダウン」するにはどうすればよいですか?

Example

答えて

3

UIViewのサブクラスを作成します。

touchesBegan:withEventtouchesMoved:withEventを上書きします。

touchesBeganでは、おそらく視覚的に変更して、ユーザーが視界に触れていることを知ることができます。 touchesMovedで は、現在のタッチ位置と前回のタッチ位置(ダウンドラッグを検出またはバックアップドラッグ)との差を計算する [[touches anyObject] locationInView:self][[touches anyObject] previousLocationInView:self]

を使用します。

カスタム図面の場合は、[self setNeedsDisplay]と呼び出して、ビューに再描画を指示します(drawRect:(CGRect)rectメソッド)。

注:これは、このビューでは複数のタッチが使用されていないことを前提としています。

1

はあなただけTouchesBeginTouchesEndedメソッドを使用する必要がiPhone App: implementation of Drag and drop images in UIView

に私の答えを参照してください。この例では、CGPointの使用方法を示しましたが、その代わりにsetFrameまたはdrawRectを使用してみる必要があります。

CGPointからの高さを取るとすぐTouchesMovedメソッドが呼び出されたとして、あなたはsetFrameまたはdrawRect使用する必要があります(わからないのが、これまで、主にsetFrameを働きます)。

+0

Will - (void)pan:(UIPanGestureRecognizer *)ジェスチャーは仕事をしますか? – Alby

+1

はい、それを使用している間はさらに注意する必要があります...あなたは適切なコントロールや他のものを定義する必要があるので...それも良いです...しかし、あなたはTouchesbeginとTouchesEndedを使用している場合...あなたは単純にインターフェイスビルダーでIBOutletsを与えることができます... – DShah

9

ドラッグアンドドロップの回避策を見つける必要はありません。 UIScrollViewは、タッチでリッスンすることでパフォーマンスを損なうことなく実行できます。

pulldown

@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)]; 

これは簡単な例です。ドラッグ可能な領域の下部にタイトル付きのボタンバーを追加してクリックアンドドロップを実装するか、または呼び出し側がその位置を変更するためにインタフェースにメソッドを追加するなど、任意の機能を追加できます。

+0

これは、必要だった。ありがとう! – bcattle

関連する問題