2

これが私のメイン画面です

(IOS Dev の初心者) これは私のメイン画面です。この画面は .ccbi ファイルで、ボタンはコードでリンクしてメソッドを実装した画像です。私がやっていることは、プラスボタンの値をクリックすると、マイナスボタンの場合と同じように増加します。しかし、ボタンをクリックして値を増減するたびに。ボタンを押すと、ボタンを離すまで値が増加し続ける必要があります。これどうやってするの?CCLayer TouchBegin(); を使用して実行できることをどこかで読みました。しかし、メカニズムを理解するのに役立つ資料は見つかりませんでした。助言がありますか?

4

4 に答える 4

3

タイマーと 2 つの IBAction を使用して簡単に実行できます。

Timer と 2 つの IBAction を次のように宣言します。

@property (nonatomic) NSTimer *timer;
- (IBAction)inc:(id)sender;
- (IBAction)stop:(id)sender;

そして、次のようなメソッドを実装します。

- (IBAction)increment:(id)sender
{
    _timer = [NSTimer scheduledTimerWithTimeInterval:.1 target:self selector:@selector(inc) userInfo:nil repeats:YES];
}
- (IBAction)stop:(id)sender
{
    [_timer invalidate];
}

- (void)inc
{
    //Increment and set the text value here
}

最も大切なもの:

関数をあなたのイベントに接続し、関数increment:をイベントに接続しますtouch downUIButtonstop:touch up inside

于 2013-07-18T06:36:07.607 に答える
1

通常の「タッチアップインサイド」の代わりに「タッチダウン」でトリガーされるメソッドを持つことができます。そのメソッドは、任意のレートでラベルを更新するタイマーを開始します。これを止めるには、タッチアップの別の方法があります。

編集後:

ボタンではなく画像がある場合は、ジェスチャ認識エンジンを使用してこれを行う必要があります。UITapGestureRecognizer のサブクラスを作成し、ビュー コントローラー クラスによって処理されるデリゲート メソッドをそれぞれ呼び出す touchesBegan と touchesEnded をオーバーライドしました。

RDTapper.h

@protocol TapperTapped <NSObject>

-(void)touchedDownOnTapper;
-(void)touchedUpOnTapper;

@end

@interface RDTapper : UITapGestureRecognizer

@property (weak,nonatomic) id <TapperTapped> delegate;

RDTapper.m

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    [self.delegate touchedDownOnTapper];
}


- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
    [self.delegate touchedUpOnTapper];
}

ViewController.m

@interface ViewController ()
@property (weak,nonatomic) IBOutlet UILabel *label;
@property (strong,nonatomic) NSTimer *aTimer;
@property (strong,nonatomic) NSDate *startTime;
@property (weak,nonatomic) IBOutlet RDTapper *tapper;
@end

@implementation ViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
    self.tapper.delegate = self;
}

-(void)touchedDownOnTapper {
    self.startTime = [NSDate date];
    [self performSelector:@selector(startIncrement) withObject:nil afterDelay:.3];
}


-(void)startIncrement {
    self.aTimer = [NSTimer scheduledTimerWithTimeInterval:.1 target:self selector:@selector(incr) userInfo:nil repeats:YES];
}

-(void)touchedUpOnTapper {
    if ([[NSDate date] timeIntervalSinceDate:self.startTime] < .3) 
        self.label.text = [NSString stringWithFormat:@"%d", self.label.text.integerValue +1];
    [NSObject cancelPreviousPerformRequestsWithTarget:self];
    [self.aTimer invalidate];
}

-(void)incr{
    self.label.text = [NSString stringWithFormat:@"%d", self.label.text.integerValue +1];
}

したがって、これは通常の touchDown/touchUp シーケンスで 1 ずつ増加しますが、指を押したままにすると、わずかな遅延の後、連続して増加します。

于 2013-07-18T06:27:53.540 に答える
0

押し下げて継続的に増加させることについては、よくわかりませんが、テキストラベルを増やすには、テキスト属性を編集するだけです。

-(IBAction) increase {
textLabel.text = [NSString stringWithFormat:@"%d", number];
}
于 2013-07-18T06:26:23.200 に答える
0

UIControlEventTouchDownUIControlEventAllTouchEventsを試してみましたか? UIButton の状態を制御すると、やりたいことを達成するのに役立ちます。

この列挙型をチェックしてください

typedef NS_OPTIONS(NSUInteger, UIControlEvents) {
    UIControlEventTouchDown           = 1 <<  0,      // on all touch downs
    UIControlEventTouchDownRepeat     = 1 <<  1,      // on multiple touchdowns (tap count > 1)
    UIControlEventTouchDragInside     = 1 <<  2,
    UIControlEventTouchDragOutside    = 1 <<  3,
    UIControlEventTouchDragEnter      = 1 <<  4,
    UIControlEventTouchDragExit       = 1 <<  5,
    UIControlEventTouchUpInside       = 1 <<  6,
    UIControlEventTouchUpOutside      = 1 <<  7,
    UIControlEventTouchCancel         = 1 <<  8,

    UIControlEventValueChanged        = 1 << 12,     // sliders, etc.

    UIControlEventEditingDidBegin     = 1 << 16,     // UITextField
    UIControlEventEditingChanged      = 1 << 17,
    UIControlEventEditingDidEnd       = 1 << 18,
    UIControlEventEditingDidEndOnExit = 1 << 19,     // 'return key' ending editing

    UIControlEventAllTouchEvents      = 0x00000FFF,  // for touch events
    UIControlEventAllEditingEvents    = 0x000F0000,  // for UITextField
    UIControlEventApplicationReserved = 0x0F000000,  // range available for application use
    UIControlEventSystemReserved      = 0xF0000000,  // range reserved for internal framework use
    UIControlEventAllEvents           = 0xFFFFFFFF
};
于 2013-07-18T06:30:27.950 に答える