//

Quiz app

Quiz app discussie in Ontwikkelen voor iOS forum; ( verdwijnt na registratie ) Hoi Allemaal, Ik ben druk bezig met het oefenen van apps maken. Dit keer wou ik een soort test maken als "The idiot test" of ...



Ga terug   iPhone, iPod touch, iPad en Apple TV forum > Development > Ontwikkelen voor iOS
Wachtwoord vergeten? Registreren!
Registreer FAQ Ledenlijst Kalender Zoeken Berichten van vandaag Markeer forums als gelezen
  #1  
Oud 25-08-10, 01:38
bluecola bluecola is offline
• iOS 4.2.1
• Besturingssysteem: Mac OS X
 
Geregistreerd: Aug 2010
Berichten: 84
Standaard Quiz app

Hoi Allemaal,

Ik ben druk bezig met het oefenen van apps maken. Dit keer wou ik een soort test maken als "The idiot test" of "The imbecile test".
Mijn vraag is of ik dan voor iedere vraag een aparte view moet maken, of dat het ook simpeler kan?
Ik heb flink rond gemailed/gebelt/gegoogled, en kom verschillende keren tegen dat je de items met hun coordinaten in een plist library, maar daar word ik niet veel wijs uit.

Alvast bedankt,
Marijn

Laatst gewijzigd door bluecola; 25-08-10 om 02:01.
Advertentie
Advertentie Gesponsorde links (verdwijnt na registratie)

  #2  
Oud 25-08-10, 09:02
sukk1e's schermafbeelding
sukk1e sukk1e is offline
• iOS 5.0.1
• Ik heb geen iPad
• Besturingssysteem: Mac OS X
 
Geregistreerd: Apr 2010
Berichten: 134
Standaard

uhmm als je met coordinaten gaat werken zouden meerdere views simpeler zijn lijkt me?
Vind ik zelf ook overzichtelijker eruit zien.
  #3  
Oud 25-08-10, 10:16
TUX2K TUX2K is offline
• iOS 14.0
• 8.1.2
• Besturingssysteem: Mac OS X
 
Geregistreerd: Oct 2008
Locatie: Amsterdam
Berichten: 174
Standaard

Nee het lijkt me niet handig als je voor iedere vraag een nieuwe view gaat maken.
Gebruik bv. een UITable met een cell voor de vraag en meerder cellen voor de antwoorden.

Nu kan je gewoon de tabel herladen met je nieuwe vraag en antwoorden.
  #4  
Oud 25-08-10, 11:34
sukk1e's schermafbeelding
sukk1e sukk1e is offline
• iOS 5.0.1
• Ik heb geen iPad
• Besturingssysteem: Mac OS X
 
Geregistreerd: Apr 2010
Berichten: 134
Standaard

Als de vragen uit alleen tekst bestaan ja.

Ik dacht met idiot test dat hij ook bepaalde handeling zou moeten uitvoeren
  #5  
Oud 25-08-10, 12:11
Whacko Whacko is offline
• iOS 7.1.2
• 5.1.1
• Besturingssysteem: Mac OS X
 
Geregistreerd: Jan 2009
Berichten: 484
Standaard

Als ik het Object georiënteerd aanpak zou ik gewoon 1 view maken: VraagView ofzo. Die is verantwoordelijk voor het tonen van een vraag. Als je verschillende soorten vragen hebt (tekst, kies een plaatje, etc), kan je twee dingen doen: bij elke nieuwe vraag de View refreshen, voor het nieuwe type vraag. Dit type wordt dan in de VraagView bijgehouden als een property.
Of optie 2: Je maakt voor elk type vraag een subclasse van VraagView: TekstVraagView en PlaatjeVraagView. deze zijn dus afgeleid van VraagView en hebben dezelfde interface, maar "tekenen" zichzelf alleen op een andere manier. Telkens als je naar de volgende vraag gaat maak je een object aan van het juiste type.
__________________
Software Engineer
iPhone Developer
  #6  
Oud 25-08-10, 16:07
bluecola bluecola is offline
• iOS 4.2.1
• Besturingssysteem: Mac OS X
 
Geregistreerd: Aug 2010
Berichten: 84
Standaard

Ik heb dus contact opgenomen met de developer van The Idiot Test 3. Hij zei dat hij de test had gemaakt door alle items met hun coordinaten in een plist tabel te zeggen, met maar een view dus. Kan iemand mij uitleggen hoe dit in elkaar zit?


Citaat:
Oorspronkelijk geplaatst door Whacko Bekijk bericht
Als ik het Object georiënteerd aanpak zou ik gewoon 1 view maken: VraagView ofzo. Die is verantwoordelijk voor het tonen van een vraag. Als je verschillende soorten vragen hebt (tekst, kies een plaatje, etc), kan je twee dingen doen: bij elke nieuwe vraag de View refreshen, voor het nieuwe type vraag. Dit type wordt dan in de VraagView bijgehouden als een property.
Of optie 2: Je maakt voor elk type vraag een subclasse van VraagView: TekstVraagView en PlaatjeVraagView. deze zijn dus afgeleid van VraagView en hebben dezelfde interface, maar "tekenen" zichzelf alleen op een andere manier. Telkens als je naar de volgende vraag gaat maak je een object aan van het juiste type.

Manier 1 van jou spreekt me wel aan, bij iedere vraag de view refreshen, hoe ga ik dat aanpakken?
Manier 2 klinkt ook wel overzichterlijk, maar ook bij bijv. een vraag met veel buttons, staan de buttons niet op dezelfde plek, dus lijkt me dit geen optie?

Citaat:
Oorspronkelijk geplaatst door sukk1e Bekijk bericht
uhmm als je met coordinaten gaat werken zouden meerdere views simpeler zijn lijkt me?
Vind ik zelf ook overzichtelijker eruit zien.
Als je voor iedere vraag een view maakt, dan word het denk ik een grote data homp. Zal niet vlug gaan.

Laatst gewijzigd door bluecola; 25-08-10 om 16:15.
  #7  
Oud 25-08-10, 17:22
Whacko Whacko is offline
• iOS 7.1.2
• 5.1.1
• Besturingssysteem: Mac OS X
 
Geregistreerd: Jan 2009
Berichten: 484
Standaard

ik zou zoiets doen:

Code:
@interface VraagView : UIView {
    int vraagType; // bijv 1= tekst, 2 = plaatjes, 3 = iets anders
    NSDictionary *vragen; // alle vragen uit plist
    NSDictionary *vraag; // huidige vraag
    
}

- (id) initWithVraag:(NSDictionary *)vraag;
- (void) reloadWithVraag:(NSDictionary *)vraag;

- (void) createItems; // deze gaat alle items uit "vraag" tekenen. en voegt een onTouchUp event toe:
- (void) onClick:(id)sender; // aan de sender kan je zien welk item er geklikt heeft
- (BOOL) checkAnswer:(int)itemId; // checkt of het geklikte item juist is, en geeft dit terug

- (void) nextVraag; // haalt de volgende vraag uit "vragen" en roept reloadWithVraag aan.
- (void) gameOver; // laat scherm zien voor gameover.
 
@end

// in je plist ga je zo'n structuur krijgen:

/*
 
 <aantalVragen/>
 <vragen>
    <vraag1>
        <vraagText/>
        <aantalAntwoorden/>
        <antwoorden>
            <antwoord1>
                <type/>
                <locatie>
                    <x/>
                    <y/>
                </locatie>
                <plaatje/>
                <tekst/>
            </antwoord1>
            <antwoord2>
                ...
            </antwoord2>
        </antwoorden>
    </vraag1>
    <vraag2>
        ...
    </vraag2>
 </vragen>

 
met die plist doe je dan ongeveer dit:
 NSDictionary *dict=[NSDictionary dictionaryWithContentsOfFile:path];

 om dan bij de coordinaten van het eerste antwoord te komen:
 
 NSArray *vragen = [dict objectForKey:@"vragen"];
 NSDictionary *vraag = [vragen objectAtIndex: 1]; 
 NSArray *antwoorden = [vraag objectForKey:@"antwoorden"];
 NSDictionary *antwoord = [antwoorden objectAtIndex: 1]; 
 NSNUmber *x = [antwoord objectForKey: @"x"];
 NSNUmber *y = [antwoord objectForKey: @"y"];
  

*/
http://codersjunto.com/wp/?p=16 plist uitlezen

Laatst gewijzigd door Whacko; 25-08-10 om 17:24.
  #8  
Oud 25-08-10, 18:01
bluecola bluecola is offline
• iOS 4.2.1
• Besturingssysteem: Mac OS X
 
Geregistreerd: Aug 2010
Berichten: 84
Standaard

Citaat:
Oorspronkelijk geplaatst door Whacko Bekijk bericht
ik zou zoiets doen:

Code:
@interface VraagView : UIView {
    int vraagType; // bijv 1= tekst, 2 = plaatjes, 3 = iets anders
    NSDictionary *vragen; // alle vragen uit plist
    NSDictionary *vraag; // huidige vraag
    
}

- (id) initWithVraag:(NSDictionary *)vraag;
- (void) reloadWithVraag:(NSDictionary *)vraag;

- (void) createItems; // deze gaat alle items uit "vraag" tekenen. en voegt een onTouchUp event toe:
- (void) onClick:(id)sender; // aan de sender kan je zien welk item er geklikt heeft
- (BOOL) checkAnswer:(int)itemId; // checkt of het geklikte item juist is, en geeft dit terug

- (void) nextVraag; // haalt de volgende vraag uit "vragen" en roept reloadWithVraag aan.
- (void) gameOver; // laat scherm zien voor gameover.
 
@end

// in je plist ga je zo'n structuur krijgen:

/*
 
 <aantalVragen/>
 <vragen>
    <vraag1>
        <vraagText/>
        <aantalAntwoorden/>
        <antwoorden>
            <antwoord1>
                <type/>
                <locatie>
                    <x/>
                    <y/>
                </locatie>
                <plaatje/>
                <tekst/>
            </antwoord1>
            <antwoord2>
                ...
            </antwoord2>
        </antwoorden>
    </vraag1>
    <vraag2>
        ...
    </vraag2>
 </vragen>

 
met die plist doe je dan ongeveer dit:
 NSDictionary *dict=[NSDictionary dictionaryWithContentsOfFile:path];

 om dan bij de coordinaten van het eerste antwoord te komen:
 
 NSArray *vragen = [dict objectForKey:@"vragen"];
 NSDictionary *vraag = [vragen objectAtIndex: 1]; 
 NSArray *antwoorden = [vraag objectForKey:@"antwoorden"];
 NSDictionary *antwoord = [antwoorden objectAtIndex: 1]; 
 NSNUmber *x = [antwoord objectForKey: @"x"];
 NSNUmber *y = [antwoord objectForKey: @"y"];
  

*/
Quick NSDictionary and plist example « CodersJunto.com plist uitlezen
Dan heb ik nog 2 vragen:

1. Waar save ik de plaatjes?
2. Als ik de coordinaten van het plaatje ingeef (waar je moet klikken dus) is dat 1 pixel, terwijl alle pixels van het plaatje natuurlijk klikbaar moeten zijn? (Of zeg ik nu iets heel stoms?)
  #9  
Oud 25-08-10, 23:47
Whacko Whacko is offline
• iOS 7.1.2
• 5.1.1
• Besturingssysteem: Mac OS X
 
Geregistreerd: Jan 2009
Berichten: 484
Standaard

1. De plaatjes stop je gewoon in je Resources folder in XCode, of een andere: "Images" ofzo. Dan worden ze in je app meegebuild.
2. Als je UIImageView gebruikt, kan je hier een TouchUpInside Event aanhangen (even googlen hoe dat precies moet). Het hele plaatje is dan klikbaar. (als je dat niet wil kan je in de TouchUpInside, testen of de geklikte plaats ergens middenin het plaatje is). En je kan een position aan het plaatje geven, je geeft dan de coordinaten van de linker bovenhoek mee.
  #10  
Oud 26-08-10, 01:45
bluecola bluecola is offline
• iOS 4.2.1
• Besturingssysteem: Mac OS X
 
Geregistreerd: Aug 2010
Berichten: 84
Standaard

Ok, ik kom steeds verder. Als plist moet ik als type info of entitlement hebben?
  #11  
Oud 26-08-10, 11:24
Whacko Whacko is offline
• iOS 7.1.2
• 5.1.1
• Besturingssysteem: Mac OS X
 
Geregistreerd: Jan 2009
Berichten: 484
Standaard

voor iPhone is er geen losse plist in het "new file" menu. Maar je kan die van Mac OSX gewoon gebruiken, zelfde formaat. "New > File > Mac OSX > Resources > Property List"
  #12  
Oud 26-08-10, 17:13
bluecola bluecola is offline
• iOS 4.2.1
• Besturingssysteem: Mac OS X
 
Geregistreerd: Aug 2010
Berichten: 84
Standaard

Ik probeer die plist in elkaar te krijgen, met een oog op de structuur die je me gaf.
Mijn vraag is of ik zo goed zit :

http://i36.tinypic.com/wcersp.png
  #13  
Oud 26-08-10, 18:00
Whacko Whacko is offline
• iOS 7.1.2
• 5.1.1
• Besturingssysteem: Mac OS X
 
Geregistreerd: Jan 2009
Berichten: 484
Standaard

Ja ziet er prima uit, alleen "Vragen" zou ik van het type "Array" maken (of list, ik weet niet hoe die precies heet).
Edit: oh en ik zou de positie twee losse velden maken van het type integer.

Laatst gewijzigd door Whacko; 26-08-10 om 18:08.
  #14  
Oud 26-08-10, 18:17
bluecola bluecola is offline
• iOS 4.2.1
• Besturingssysteem: Mac OS X
 
Geregistreerd: Aug 2010
Berichten: 84
Standaard

Oke, neem ik mee. En wat nou als ik 5 afbeeldingen in mijn vraag wil? Dan moet ik dus 5x het veld afbeelding maken? Dat is dan het handigt? Of kan ik dan beter een array afbeelding onder de dictonary vraag1 maken met daarin 5 velden afbeelding?
  #15  
Oud 26-08-10, 18:32
Whacko Whacko is offline
• iOS 7.1.2
• 5.1.1
• Besturingssysteem: Mac OS X
 
Geregistreerd: Jan 2009
Berichten: 484
Standaard

yep, beter om een array met afbeeldingen te maken.
  #16  
Oud 26-08-10, 20:10
bluecola bluecola is offline
• iOS 4.2.1
• Besturingssysteem: Mac OS X
 
Geregistreerd: Aug 2010
Berichten: 84
Standaard

De functies moet ik zelf uitwerken in mijnappnaamviewcontroller.m ?(CreateItem, CheckAnswer, enz.)
en moet ik de vragen in de plist niet allemaal een ID meegeven?(integer)
Zou je me kunnen vertellen hoe ik die functies moet uitwerken? (niet voorkauwen en stukjes codes geven, maar een beetje vertellen hoe.)

Laatst gewijzigd door bluecola; 27-08-10 om 11:37.
  #17  
Oud 01-09-10, 18:02
Whacko Whacko is offline
• iOS 7.1.2
• 5.1.1
• Besturingssysteem: Mac OS X
 
Geregistreerd: Jan 2009
Berichten: 484
Standaard

De functies moet ik zelf uitwerken in mijnappnaamviewcontroller.m ?(CreateItem, CheckAnswer, enz.)
yep.

en moet ik de vragen in de plist niet allemaal een ID meegeven?(integer)
Kan je doen. is makkelijker om de vragen uit elkaar te houden ja

Zou je me kunnen vertellen hoe ik die functies moet uitwerken? (niet voorkauwen en stukjes codes geven, maar een beetje vertellen hoe.
Code:
- (id) initWithVraag:(NSDictionary *)vraag;
// geef een van de items uit de Lijst van vragen mee tijdens het initializeren. Bouw hier dan gelijk je view op. Het beste is om de volgende functie hier aan te roepen.
- (void) reloadWithVraag:(NSDictionary *)vraag;
// Bouwt het scherm opnieuw op aan de hand van de meegegeven vraag. Gebruikt CreateItems, om het scherm te vullen met de plaatjes, en de vraag.

- (void) createItems; // deze gaat alle items uit "vraag" tekenen. en voegt een onTouchUp event toe:
- (void) onClick:(id)sender; // wordt aangeroepen als er op een image geklikt wordt. aan de sender kan je zien welk item er geklikt is. Geef dit door aan de volgende functie
- (BOOL) checkAnswer:(int)itemId; // checkt of het geklikte item het juiste antwoord is, en geeft dit terug.
Als het antwoord goed was, roep je nextVraag aan. En anders gameOver.

- (void) nextVraag; // haalt de volgende vraag uit "vragen" en roept reloadWithVraag aan.
- (void) gameOver; // laat scherm zien voor gameover.
Meer kan ik er niet van maken, of ik moet de code gaan neerzetten. En dan kan ik net zogoed de hele app bouwen
Reageren



Er zijn 1 actieve gebruikers die momenteel deze discussie bekijken (0 leden en 1 gasten)

 
Discussietools
Weergave

Soortgelijke discussies

Discussie Auteur Forum Reacties Laatste bericht
Music quiz voor iphone Colburners Jailbreak apps en thema's 0 15-06-09 18:04

Regels voor berichten
Je mag geen nieuwe discussies starten
Je mag niet reageren op berichten
Je mag geen bijlagen versturen
Je mag niet je berichten bewerken

BB code is Aan
Smileys zijn Aan
[IMG]-code is Aan
HTML-code is Uit
Trackbacks are Aan
Pingbacks are Aan
Refbacks are Uit



Alle tijden zijn GMT +2. Het is nu 12:45.