touchesMoved
最近、 内からタッチ イベント ( など)を登録できないという問題がありましたUIScrollView
。多くの人と話し、たくさんの投稿を読んだ後、タッチ自体を受け入れず、代わりにタッチをサブクラスUIScrollView
に渡す必要があることがわかりました。UIScrollView
私はobjective-cに非常に慣れていないため、サブクラスがどのように定義されているか(個別の.h/.mファイルまたは@interfaceなどで)、およびiOSがレスポンダーチェーンをどのように処理するかについて頭を悩ませています。 .
私の正確な状況を説明させてください.Noobで何をする必要があるかを説明してくれる人は誰でも本当に感謝しています.
アプリに単一のページがあり、デフォルトUIView
をに変更したUIScrollView
ので、それをInterfaceBuidler
すべて調べると、私のSampleViewController
とが表示されUIScrollView
ます。私は次のように自分UIScrollView
をのにリンクしました:@Interface
SampleViewControler.h
#import <UIKit/UIKit.h>
@interface SampleViewController : UIViewController
{
}
@property (strong, nonatomic) IBOutlet UIScrollView *mainScroller;
@end
そして、私は次のように私のUIScrollView
inを参照しましSampleViewController.m
た:
#import "SampleViewController.h"
@interface SampleViewController ()
@end
@implementation SampleViewController
@synthesize mainScroller = _mainScroller;
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
NSLog(@"Movement!");
}
-(void)viewWillAppear:(BOOL)animated
{
[_mainScroller setContentOffset:CGPointMake(0,0) animated:YES];
}
のクラスを に変更するUIScrollView
とUIView
、タッチが検出され、いくつかのNSLog
メッセージが送信されます。ただし、UIView
を に戻すとUIScrollView
、タッチは無視されます。
私が理解していることからUIScrollView
、コードを使用してサブクラスをセットアップする必要があります。
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
NSLog(@"Movement!");
}
...そして、SampleViewController.m を次のコードに変更します。
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
[[self.nextResponder nextResponder] touchesMoved:touches withEvent:event];
}
ただし、1) そのようなサブクラスをセットアップする方法、および 2) なぜこれが機能するのか[[self.nextResponder nextResponder] touchesMoved:touches withEvent:event];
がよくわかりません。 .SampleViewController.m
NSLog(@"Movement!");
私は見つけることができるすべてのチュートリアルを試しましたが、SE の専門知識に目を向けています! ありがとう。