6 berichten aan het bekijken - 1 tot 6 (van in totaal 6)
  • Q:
    Bijdrager
    iRuben

    Buttonpositie omwisselen Objective-C

    Goedenavond mede OMT’ers,

    Ik wil een stukje code maken waarin ik 4 buttons van positie kan doen veranderen. Momenteel ben ik bezig een app te maken waarin mensen kunnen kiezen uit 4 mogelijkheden (buttons) die steeds opnieuw op een willekeurige volgorde moeten staan zodra je een van de buttons indrukt. Hiervoor heb ik de volgende code gemaakt:

     
        //Er zijn 4 VERSCHILLENDE waardes in een array op 4 VERSCHILLENDE plekken
        NSMutableArray *btFramesArray = [NSMutableArray arrayWithObjects: [NSValue valueWithCGRect:CGRectMake(20, 158, 280, 44)],[NSValue valueWithCGRect:CGRectMake(20, 222, 280, 44)],[NSValue valueWithCGRect:CGRectMake(20, 286, 280, 44)],[NSValue valueWithCGRect:CGRectMake(20, 350, 280, 44)],nil];
     
        //De plekken worden willekeurig "geschud"
        NSUInteger count = [btFramesArray count];
        for (NSUInteger i = 0; i < count; ++i) {
            // Select a random element between i and end of array to swap with.
            NSInteger nElements = count - i;
            NSInteger n = (arc4random() % nElements) + i;
            [btFramesArray exchangeObjectAtIndex:i withObjectAtIndex:n];
        }
     
        //Ieder button krijt één vaste plek uit de rij waarin de posities zijn gewisseld
        firstButton.frame = [[btFramesArray objectAtIndex:0] CGRectValue];
        secondButton.frame = [[btFramesArray objectAtIndex:1] CGRectValue];
        thirdButton.frame = [[btFramesArray objectAtIndex:2] CGRectValue];
        fourthButton.frame = [[btFramesArray objectAtIndex:3] CGRectValue];
     
        NSLog(@"%@", btFramesArray);
     

    Wat er echter gebeurt is dat er vaak één button verdwijnt (deze is dan niet meer zichtbaar in de app en ligt waarschijnlijk op of onder een andere), hoewel ik toch 4 verschillende output-waardes gelogd krijg.

    Weet iemand misschien waardoor dit komt of is er een andere, misschien veel eenvoudigere oplossing om de 4 buttons steeds van volgorde veranderd te krijgen?

    Bij voorbaat dank.

    Inactief
    Anoniem

    Is die arcrandom wel zo random als je denkt dat het is? Wat is de waarde van n voor elke iteratie?

    Je kunt natuurlijk altijd een NSLog erin zetten om te kijken wat de waarde is van elke CGRect.

    EDIT: o wacht, dat doe je al;-)

    Bijdrager
    Jakko Westerbeke

    Krijgt de gebruiker duidelijk te zien dat de knoppen van plek veranderen? Zo niet, zou het dan niet makkelijker zijn om alleen de titels op de knoppen te veranderen in plaats van de knoppen zelf te verplaatsen?

    Bijdrager
    Verwijder

    Ik weet niet wat er mis en ik roep maar wat:
    Welke knoppen verdwijnen? De knoppen die verplaatsen of die op hun plek blijven?
    Heeft het iets te maken met de volgorde, eerst de ene knop onder of over de ander, dan de ander verplaatsen?
    Ik heb geen verstand van iOS maar in de documentatie staat:

    Changing the frame rectangle automatically redisplays the receiver without invoking the drawRect: method. If you want the drawRect: method invoked when the frame rectangle changes, set the contentMode property to UIViewContentModeRedraw.

    Al eens UIViewContentModeRedraw geprobeerd?

    Bijdrager
    bitsflew

    Controleer of de firstButton t/m fourthButton outlets verschillende waarden bevatten!

    Zal niet de eerst keer zijn dat iemand twee outlets aan dezelfde view koppelt:)

    Bijdrager
    iRuben

    Opgelost! Autolayout uitzetten en alles werkt perfect!

6 berichten aan het bekijken - 1 tot 6 (van in totaal 6)

Je moet ingelogd zijn om een reactie op dit onderwerp te kunnen geven.