iCulture forum | iPhone, iPad,  iPod touch, Apple TV en iOS

iCulture forum | iPhone, iPad, iPod touch, Apple TV en iOS (https://forum.iculture.nl/)
-   Ontwikkelen voor iOS (https://forum.iculture.nl/f133/development/f58/ontwikkelen-voor-ios/)
-   -   IBAction in een IBAction (https://forum.iculture.nl/f133/development/f58/ontwikkelen-voor-ios/115479-ibaction-ibaction.html)

gobelz 04-04-12 00:43

IBAction in een IBAction
 
Beste,

Ik ben bezig met een project waar ik eigenlijk als het ware een IBAction in een IBAction wil hebben.

Een gebruiker kiest een afbeelding en word geladen, vervolgens kan de gebruiker ook een geluid luisteren wat hoort bij de afbeelding.

Ik heb nu dit:
Code:

- (IBAction)onButton {
       
    UIImage* basicImg = [UIImage imageNamed:@"Basic.png"];
        basic.image = basicImg;
    [basicImg release];
   
    UIImage *backImg = [UIImage imageNamed:@"PinkBack.png"];
        background.image = backImg;
    [backImg release];
   
}

Ik wil dus aan dit gedeelte een IBAction toevoegen waarbij de gebruiker wanneer hij/zij dat wil een geluidje kan afspelen.

Graag hoor ik of dit kan.

gobelz 05-04-12 10:42

Iemand met een idee?

Ik kom er niet uit, het lijkt simpel maar de logica kan ik niet op een rij zetten. Ik zit al een paar dagen vast nu.

Hulp is zeer bruikbaar.

wubbe 06-04-12 10:55

Wat is je vraag nu precies.
Volledig onduidelijk wat je probleem nu is.

als de vraag onduidelijk is dan hoef je weinig hulp te verwachten

gobelz 06-04-12 11:34

Laat ik het zo vertellen.

*- Ik heb een scherm waar ik een afbeelding op zie.
*- Vervolgens kan er een ander afbeelding gekozen worden. dmv IBAction, zie bovenstaand code.
*- Hier wil ik een geluidsbestand aan toevoegen. dmv IBAction, ik weet juist hier niet hoe het moet (binnen dezelfde class).

Dmv IBActions worden de afbeeldingen gewisseld. Ze verwijzen niet naar een ander class.

Dus wanneer ik van afbeelding wissel en op een willekeurig tijd de geluidsbestand wil afspelen. Een IBAction (afspelen van geluid) in een IBAction (wisselen van afbeeldingen)

Ik hoop dat het zo duidelijker is.

wubbe 06-04-12 11:44

Nee, ik snap er niets van.

(Eerlijk gezegd twijfel ik aan jouw programmeer-skills)

gobelz 06-04-12 11:51

Citaat:

Oorspronkelijk geplaatst door wubbe (Bericht 785682)
Nee, ik snap er niets van.

(Eerlijk gezegd twijfel ik aan jouw programmeer-skills)


Wat is dit nou voor een reactie. Gaan we nu ook nog eens twijfelen aan programmeer-skills, terwijl er iets anders gevraagd word in de topic :S

Raar hoor.

XIII 06-04-12 15:13

Misschien helpt het als je aangeeft waardoor die IBAction wordt getriggerd?

(welke gebruikersactie/event; geef het dan aub voor beide aan)

gobelz 06-04-12 17:19

Citaat:

Oorspronkelijk geplaatst door XIII (Bericht 785717)
Misschien helpt het als je aangeeft waardoor die IBAction wordt getriggerd?

(welke gebruikersactie/event; geef het dan aub voor beide aan)


De eerste IBAction laadt de afbeelding. De tweede IBAction speelt het geluid af, maar wel op opdracht van de gebruiker.

Ik heb nu 1 class, blabla.h + blabla.m + blabla.xib. Hier voer ik de eerste opdracht uit, dus het tonen van een afbeelding.

In dezelfde class wil ik dus bij (als de gebruiker een actie heeft gekozen, bijv foto2) een geluidje (dmv een ibaction), vervolgens kan de gebruiker een ander afbeelding kiezen (bijv. foto 15) en met een ander geluid.

Hoop dat dit duidelijker is.

wubbe 06-04-12 17:29

1. Maak een functie bv. playSound die het geluid afspeelt, in plaats van de IBAction
2. Roep in de IBAction die het geluid afspeelt playSound aan.
3. Roep in de IBAction die de afbeelding laadt ook playSound aan.

Bedoel je dit?

gobelz 06-04-12 17:42

Citaat:

Oorspronkelijk geplaatst door wubbe (Bericht 785749)
1. Maak een functie bv. playSound die het geluid afspeelt, in plaats van de IBAction
2. Roep in de IBAction die het geluid afspeelt playSound aan.
3. Roep in de IBAction die de afbeelding laadt ook playSound aan.

Bedoel je dit?


Dat is een tweede keus eigenlijk van mij, omdat als de gebruiker de afbeelding laadt dat playSound ook gelijk wordt afgespeeld.

Wat ik in gedachte heb is dat de gebruiker de playSound op eigen commando (dus niet tezamen met de afbeelding die geladen wordt) laat afspelen.

XIII 07-04-12 10:31

Nogmaals de vraag hoe de gebruiker dat commando om geluid af te spelen geeft...

(ik snap namelijk nog steeds niet waarom je denkt dat er een IBAction *in* een IBAction nodig is)

gobelz 07-04-12 10:36

Citaat:

Oorspronkelijk geplaatst door XIII (Bericht 785854)
Nogmaals de vraag hoe de gebruiker dat commando om geluid af te spelen geeft...

(ik snap namelijk nog steeds niet waarom je denkt dat er een IBAction *in* een IBAction nodig is)

Code:

- (IBAction)playAT {
   
    NSString *path = [[NSBundle mainBundle] pathForResource:@"AT" ofType:@"mp3"];
    NSLog(@"Path equals: %@", path);
   
    NSError *error;
   
    AVAudioPlayer *newAVAudioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path] error:&error];   
    [self setAudioPlayer:newAVAudioPlayer];
    [newAVAudioPlayer release];
   
    audioPlayer.delegate = self;
    [audioPlayer prepareToPlay];
    [audioPlayer setNumberOfLoops:0];
    [audioPlayer play];
   
}


XIII 07-04-12 12:20

Sorry, een stukje code is geen antwoord op mijn vraag...

Nogmaals de vraag hoe de gebruiker dat commando om geluid af te spelen geeft...

(welke UI interactie voert hij/zij uit; niet welke code jij daar aan plakt)

JornZ 10-04-12 10:06

Ja precies hoe wil je dat de gebruiker het commando geeft om het geluid af te spelen?

Stel dat je simpelweg twee knoppen laat zien, één voor het wisselen van afbeeldingen en één voor het afspelen van een mogelijk bijbehorend geluid, dan is e.e.a. niet ingewikkeld meer. Dan kun je met twee IBActions het zaakje klaren; één wisselt foto's en de ander speelt een bijbehorend geluid (na controle van het plaatje). Ik zou zoals eerder gesuggereerd deze functies apart maken en aanroepen in de IBActions.

Als je iets anders bedoelt dan is dat in ieder geval nog niet over gekomen...

gobelz 10-04-12 10:59

Citaat:

Oorspronkelijk geplaatst door JornZ (Bericht 786555)
Ja precies hoe wil je dat de gebruiker het commando geeft om het geluid af te spelen?

Stel dat je simpelweg twee knoppen laat zien, één voor het wisselen van afbeeldingen en één voor het afspelen van een mogelijk bijbehorend geluid, dan is e.e.a. niet ingewikkeld meer. Dan kun je met twee IBActions het zaakje klaren; één wisselt foto's en de ander speelt een bijbehorend geluid (na controle van het plaatje). Ik zou zoals eerder gesuggereerd deze functies apart maken en aanroepen in de IBActions.

Als je iets anders bedoelt dan is dat in ieder geval nog niet over gekomen...


Jornz,

Bedankt voor je reactie. Ik heb het inderdaad zo aangepakt. Ik heb meerdere IBActions die elk een ander afbeelding bevat.

Wat ik nu heb gedaan is bij elk afbeelding die ik selecteer een aantal IBActions verbergen. Dus, 10 IBActions aanmaken met geluid. 9 ervan verbergen en die ene tonen. Ik had een makkelijker manier verwacht (compacter. mijn vraag was dus hier naar) maar dit werkt ook.

groetjes,

XIII 10-04-12 20:07

IBActions verbergen?

Wat bedoel je daarmee? (Wat heb je gedaan?)

gobelz 10-04-12 20:20

Citaat:

Oorspronkelijk geplaatst door XIII (Bericht 786727)
IBActions verbergen?

Wat bedoel je daarmee? (Wat heb je gedaan?)

Stel ik heb 10 afbeeldingen die ik afzonderlijk van elkaar wil tonen op basis van een IBAction, een actie die de gebruiker geeft.
Ik heb 10 geluiden dmv voor een ieder IBAction aangemaakt.

Wanneer afbeelding 2 wordt geselecteerd, verberg ik de 9 IBActions (geluidknoppen) en toon ik alleen de IBAction die bij afbeelding 2 hoort.

dmv. bijv. in een IBAction van een afbeelding bijv. - (IBAction)afb2
Code:

button1.hidden = YES;
button2.hidden = NO;
button3.hidden = YES;
etc, etc.
incl. code om afbeelding 2 te tonen

Een hele omweg als je het mij vraagt. Maar ik kon niks anders bedenken dan dit :D
Er zal vast een methode zijn om dit compacter aan te pakken?.

XIII 10-04-12 20:39

Je verbergt dus knoppen (en niet IBActions).

De gekozen oplossing vind ik weinig elegant.

Waarom doe je niet wat JornZ voorstelt? (slechts 2 knoppen; niets te verbergen)

Of begrijpen we je nog steeds niet?

gobelz 10-04-12 21:04

Citaat:

Oorspronkelijk geplaatst door XIII (Bericht 786750)
Je verbergt dus knoppen (en niet IBActions).

De gekozen oplossing vind ik weinig elegant.

Waarom doe je niet wat JornZ voorstelt? (slechts 2 knoppen; niets te verbergen)

Of begrijpen we je nog steeds niet?

Ik heb meerdere knoppen in 1 class.

Ik verberg inderdaad de knoppen (IBOutlets).

Ik kan mijn probleem helaas niet goed te woord brengen.

Maar uiteraard, bedankt voor de reacties en de hulp

glitch 05-05-12 22:17

Je kunt tags aan de knoppen toevoegen in Interface Builder en op basis hiervan selectieve acties uitvoeren.

Om vervolgens de knop te kunnen benaderen, moet je een sender meegeven. Uit de losse pols:

Code:

- (IBAction) buttonPressed:(id)sender {
  UIButton *originatingButton = (UIButton *) sender;

  switch (originatingButton.tag) {
    case 0:
      NSLog (@"first button pressed");

    default:
      NSLog (@"An unknown button has been pressed");
  }

}


Alle tijden zijn GMT +2. Het is nu 23:11.