Zwei Aktionsmethoden für eine UIButton; verfolgen nächsten und suchen nach vorn:

StackOverflow https://stackoverflow.com/questions/1926702

  •  20-09-2019
  •  | 
  •  

Frage

Ich bin eine Musik-Player-Anwendung erstellen und muß, dass zwei Aktionen aus einer einzigen Taste aufgerufen werden, eine zum nächsten Titel durch Ausbesserungs innerhalb Ereignisse und anderen Vorspulen der curenttrack einhüllen eines ‚langen Drucks‘ zu überspringen. Ich weiß nicht, welches Ereignis zu dieser langen Presse zeigt, ich dachte, es aufzusetzen zu sein, aber es funktionierte nur, während die Taste gedrückt halten. Wenn ich die Taste losgelassen wurde die Strecke zum nächsten Punkt übersprungen. pls help

AVAudioPlayer *appSoundPlayer;// declared in .h file

m-Datei, wobei das Verfahren:

-(void)seekForwards{
NSTimeInterval timex;
timex = appSoundPlayer.currentTime;
        timex = timex+5; // forward 5 secs

        appSoundPlayer.currentTime = timex;
        timex = 0;
}
War es hilfreich?

Lösung

Persönlich würde ich nur die Zustand der Schaltfläche Spur mit einer ganzen Zahl auf Ihren View-Controller oder in einem Knopfunterklasse. Wenn Sie verfolgen, wie die Schaltfläche tut können Sie steuern, was jeder der Aktionen ausführen. In Ihrer .h-Datei put in einigen Sachen wie diese:

enum {
    MyButtonScanning,
    MyButtonStalling,
    MyButtonIdle
};



@interface YourClass : UIViewController {
    NSInteger buttonModeAt;
}
@property (nonatomic) NSInteger buttonModeAt;
-(IBAction)buttonPushedDown:(id)sender;
-(void)tryScanForward:(id)sender;
-(IBAction)buttonReleasedOutside:(id)sender;
-(IBAction)buttonReleasedInside:(id)sender;
@end

Und dann in .m Datei wirft in etwas über dieses Thema:

@implementation YourClass
///in your .m file
@synthesize buttonModeAt;


///link this to your button's touch down
-(IBAction)buttonPushedDown:(id)sender {
    buttonModeAt = MyButtonStalling;
    [self performSelector:@selector(tryScanForward:) withObject:nil afterDelay:1.0];
}

-(void)tryScanForward:(id)sender {
    if (buttonModeAt == MyButtonStalling) {
        ///the button was not released so let's start scanning
        buttonModeAt = MyButtonScanning;

        ////your actual scanning code or a call to it can go here
        [self startScanForward];
    }
}

////you will link this to the button's touch up outside
-(IBAction)buttonReleasedOutside:(id)sender {
    if (buttonModeAt == MyButtonScanning) {
        ///they released the button and stopped scanning forward
        [self stopScanForward];
    } else if (buttonModeAt == MyButtonStalling) {
        ///they released the button before the delay period finished
        ///but it was outside, so we do nothing
    }

    self.buttonModeAt = MyButtonIdle;
}

////you will link this to the button's touch up inside
-(IBAction)buttonReleasedInside:(id)sender {
    if (buttonModeAt == MyButtonScanning) {
        ///they released the button and stopped scanning forward
        [self stopScanForward];
    } else if (buttonModeAt == MyButtonStalling) {
        ///they released the button before the delay period finished so we skip forward
        [self skipForward];
    }

    self.buttonModeAt = MyButtonIdle;

}

Danach nur die Aktionen der Schaltfläche Link zu dem, was ich vor dem IBactions in den Kommentaren darauf hingewiesen habe. Ich habe nicht getestet, aber es sollte funktionieren.

Andere Tipps

Sie können Ihre Schaltfläche Klasse, Unterklasse und ein wenig um UIResponder Methoden spielen. Zum Beispiel in touchesBegan Methode können Sie einige Timer und Call-Methode ausgelöst, die die Dateien werfen bewegen und diese Zeitgeber in der toucesEnded Methode ungültig

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top