1

UIScrollView 内に画像があり、ユーザーが指をドラッグするとテキストを描画するコードがあります。ユーザーが画面に触れているときに制御できるようにしたいのですが、

a) ユーザーは指を使って描画する必要があります OR

b) ユーザーは指でスクロール ビューを移動する必要があります。

ユーザーが何をしているかを追跡するブール値があります。そして、私はタッチメソッドを持っています:

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{

    UITouch *mytouch=[[touches allObjects] objectAtIndex:0];
    if(draw == false) {
        printf("calling super");
        [scrollView touchesBegan:touches withEvent:event];
    }
    else
        [myPath moveToPoint:[mytouch locationInView:self]];

}
-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{

    UITouch *mytouch=[[touches allObjects] objectAtIndex:0];
    if(draw == false)
        [scrollView touchesMoved:touches withEvent:event];
    else {
        [myPath addLineToPoint:[mytouch locationInView:self]];
        [self setNeedsDisplay];
    }

なぜこれが機能しないのですか?基本的に、描画していない場合は、スクロール ビューの touchesBegan と touchesMoved を呼び出します。描画する場合は、myPath を使用して描画します。

ただし、draw が false の場合、スクロール ビューは本来あるべきように移動したりズームインしたりしません。

4

2 に答える 2

1

私は以前にこの問題に遭遇したことがあります。そして私はこのように解決します:

mainViewを作成する必要があります。2つのプロパティがあります。1つはyourScrollViewで、もう1つはyourDrawImageViewです。[yourScrollView addSubviews:yourDrawImageView];[mainView addSubviews:yourScrollView];

次に、このようにmainView.mにtouchsメソッドを記述します(scrollViewステートメントを無視します)

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{

    UITouch *mytouch=[[touches allObjects] objectAtIndex:0];
   if ([[touches allObjects] isKindOfClass:[yourDrawImageView class]]) 
   {

        [myPath moveToPoint:[mytouch locationInView:self]];
   }

}
-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{

    UITouch *mytouch=[[touches allObjects] objectAtIndex:0];
   if ([[touches allObjects] isKindOfClass:[yourDrawImageView class]]) 
   {

        [myPath addLineToPoint:[mytouch locationInView:self]];
        [self setNeedsDisplay];
   }


}

最後のステップ、s you ignor is to code scrollView touches event , ityourSceollView.mに何を書き込むか、次のようになります。

#import "yourScrollView.h"


@implementation yourScrollView


- (id)initWithFrame:(CGRect)frame {

    self = [super initWithFrame:frame];
    if (self) {
        // Initialization code.
    }
    return self;
}

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
    [super touchesBegan:touches withEvent:event];
    if(!self.dragging)
        [[self nextResponder] touchesBegan:touches withEvent:event];
}

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event{
    [super touchesMoved:touches withEvent:event];
    if(!self.dragging)
        [[self nextResponder] touchesMoved:touches withEvent:event];
}

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{
    [super touchesEnded:touches withEvent:event];
    if(!self.dragging)
        [[self nextResponder] touchesEnded:touches withEvent:event];
}

- (void)dealloc {
    [super dealloc];
}


@end 

私はそれがあなたを助けることができることを望みます:-)

于 2012-07-27T23:51:09.573 に答える
0

UIScrollViews を使用します。これは、や フレンドとUIGestureRecognizerは別にシステムによって呼び出されます。touchesBegan:withEvent:これを行う簡単な方法は、タッチに反応させたくない場合にスクロール ビューでスクロールを無効にすることです。

于 2012-07-27T19:15:25.400 に答える