Odpowiedz na ten temat
Pokaż wyniki od 1 do 8 z 8
  1. Avatar tmkszlc
    Dołączył
    Sep 2008
    Skąd
    Koszalin
    Postów
    947

    Cytuj | #1

    Witam, zaznaczam jeszcze raz, że od niedawna mam styczność z Xcode i problem jest nastepujący:

    W aplikacji mam dużo buttonów, grafik itp, Wszystko leży na jednym View i nie mogę już powoli tego ogarniać. Można to jakoś rozdzielić na warstwy? Jak wy sobie radzicie z takim problemem? mam 15 obiektów i nie mogę wygodnie ustawiać obiektów.

    ---------- Wpis dodano o 19:20 ---------- Poprzedni wpis dodano o 19:05 ----------

    dobra , to było za proste xD wystarczyło utworzyć nowy view, wrzucić wszystko co się chce i się wygodnie ustawia, po czym zadeklarować nowy view. Działam dalej.

    ---------- Wpis dodano o 19:58 ---------- Poprzedni wpis dodano o 19:20 ----------

    okej, kolejne pytanie. mam taki uklad w .xib:

    view
    --viewStart
    --viewGame
    --viewPause
    --viewGameOver

    jak szybko ukryc ktorys z viewsow w pliku .xib?
    Komputer: MacBook Pro 17 2010 i7 Matt
    Telefon: iPhone 3G 16GB
    Odtwarzacz: iPhone 3G 16GB
    Tablet: The new iPad 32GB WiFi + 4G
    


  2. Avatar Krzema
    Dołączył
    Jul 2008
    Skąd
    Gdańsk, PL
    Postów
    181

    Cytuj | #2

    A nie byłoby wygodniej trzymać różne ekrany menu w osobnych XIB-ach?

  3. Avatar tmkszlc
    Dołączył
    Sep 2008
    Skąd
    Koszalin
    Postów
    947

    Cytuj | #3

    zapewne, tylko zastanawiam sie jak je wtedy wywolac.aktualnie zrobilem tak jak to wyzej opisalem i wyglada to mniej wiecej tak:

    .h
    Kod:
    {
    UIView *viewStart;
    ...
    UIView *viewGameOver;
    }
    ......
    
    @property (nonatomic, retain) IBOutlet UIView *viewStart;
    ....

    .m
    Kod:
    @synthesize....;
    
    - (void)viewDidUnload { wszystkie self.view = nil. }
    - (void)dealloc { tu deallokowane wszystkie viewsy};
    wtedy jesli chce operowac na odpowiednim viewsie to robie myk z .hidden w funkcjach w ktorych obsluguje viewsyi ukrywam niepotrzebne. nie wiem czy da sie to jakos inteligentniej zalatwic, aczkolwiek teraz to dziala tak jak powinno. moze da sie to jakos bardziej zoptymalizowac.

    Zapytam przy okazji: Czy jesli ukrywam całe viewsy z obiektami na nich uzywajac wlasnie sposobu z .hidden (tj. viewJakisTam.hidden = YES) to czy pamiec po tym viewsie jest zwalaniana czy to jest trzymane w pamieci ciagle i zalega niepotrzebnie?

    dzieki za odpowiedzi.
    Ostatnio edytowane przez tmkszlc ; 31.07.2011 o 00:01
    Komputer: MacBook Pro 17 2010 i7 Matt
    Telefon: iPhone 3G 16GB
    Odtwarzacz: iPhone 3G 16GB
    Tablet: The new iPad 32GB WiFi + 4G
    

  4. Avatar Krzema
    Dołączył
    Jul 2008
    Skąd
    Gdańsk, PL
    Postów
    181

    Cytuj | #4

    Co do "hidden", z tego co pamiętam, obiekt jedynie nie jest rysowany. Nie jest usuwany z pamięci, bo właśnie specyfika właściwości "hidden" polega na tym, że obiekt jest zawsze w pamięci, gotowy do wyświetlenia.

    Też powoli piszę swoją pierwszą app i póki co kwestię menu mam rozwiązaną tak: mam 4 widoki: menu główne, podmenu "wybierz poziom", "ustawienia" i "creditsy". Do każdego z tych widoków mam osobny View Controller, bo każdy widok ma swoje przyciski i inne kontrolki, więc tak jest wygodnie. Dodatkowo, mam jeszcze jeden View Controller, który sam z siebie "nie wygląda", lecz tylko przełącza między sobą te 4 widoki. Kod przełączający widoki jest bardzo prosty (akurat ten fragment przełącza widok menu głównego na widok wyboru poziomu):

    Kod:
    	[mainMenuController.view removeFromSuperview];
    	[self.view insertSubview:self.selectLevelController.view atIndex:0];
    Polecam książkę Beginning iPhone 3 Development (Dave Mark, Jeff LaMarche), która zawiera właśnie takie podstawy. Pewnie powstały już kolejne edycje dla nowych wersji iOS, ale ja korzystam z tej. Opisane przeze mnie rozwiązanie właśnie ściągnąłem z tej ksiażki.

    Jeśli chodzi o optymalizację w pojęciu przyspieszenia, być może to co teraz masz jest najszybsze... Ale wygodnie jest mieć wszystko w jednym XIBie? Połapujesz się tam? Chyba musisz ciągle przesuwać na bok widoki żeby dotrzeć do jakiegoś?
    Ostatnio edytowane przez Krzema ; 31.07.2011 o 21:21

  5. Avatar tmkszlc
    Dołączył
    Sep 2008
    Skąd
    Koszalin
    Postów
    947

    Cytuj | #5

    @Krzema, no właśnie mam kilka Views dodane do głównego i musze odsuwać co jest irytujące. Jutro pobawię się w te kilka plików .xib tak jak jest w tej książce. Sposób bardzo fajny i łatwiej będzie to wszystko ogarnąć. Aktualnie to co mam w aplikacji pozwala na podstawową rozgrywkę i chciałbym się zająć optymalizacją kodu, żeby to było jakoś łatwiej ogarnąć bo im więcej kodu tym jest ciężej.
    Komputer: MacBook Pro 17 2010 i7 Matt
    Telefon: iPhone 3G 16GB
    Odtwarzacz: iPhone 3G 16GB
    Tablet: The new iPad 32GB WiFi + 4G
    

  6. Avatar tmkszlc
    Dołączył
    Sep 2008
    Skąd
    Koszalin
    Postów
    947

    Cytuj | #6

    dobra nowego tematu zakładał nie będę, napisze tutaj. Zrobiłem pliki z klasami, każda w osobnym pliku, osobne .xib'y dla każdej klasy i niby to wszystko gra jak w mojej klasie RootViewController zadeklaruje sobie ze dany xib ma sie wczytac. wtedy jest okej. no i tak oto zadeklarowalem sobie wczytywanie menu na start aplikacji:

    RootViewControoler.m
    Kod:
    - (void)viewDidLoad
    {
        Menu *Controller = [[Menu alloc] initWithNibName:@"Menu" bundle:nil];
        self.menu = Controller;
        [self.view insertSubview:Controller.view atIndex:0];
        [Controller release];
        [super viewDidLoad];
    }
    okej, dziala pieknie. nadchodzi moment, w ktorym uzytkownik wybiera opcje w menu. dajmy na to klika na przycisk i wywoluje sie funkcja playGame:. mam ja zadeklarowana nastepujaco:

    Menu.h
    Kod:
    @class RootViewController;
    @class Game;
    
    @interface Menu : UIViewController{
        Menu *menu;
        Game *game;
    }
    @property (nonatomic, retain) Menu *menu;
    @property (nonatomic, retain) Game *game;
    
    @property (nonatomic, retain) IBOutlet UIButton *btnPlay;
    
    - (IBAction)playGame:(id)sender;
    Menu.m
    Kod:
    #import "RootViewController.h"
    #import "Menu.h"
    #import "Game.h"
    ...
    @implementation Menu
    @synthesize menu, game;
    @synthesize btnPlay;
    ...
    - (IBAction)playGame:(id)sender{    
        Game *Controller = [[Game alloc] initWithNibName:@"Game" bundle:nil];
        self.game = Controller;
        [menu.view removeFromSuperview];
        [self.view insertSubview:Controller.view atIndex:0];
        [Controller release];
     
        NSLog(@"Game.");
    }
    ...
    - (void) dealloc
    {
     ...
        [btnPlay release];
        [menu release];
        [game dealloc];
        [super dealloc];
    }
    w konsoli oczywiscie po kliknieciu pokazuje się napis "Game." pozatym ekran sie nie zmienia :/ Coś robię źle ale nie wiem w którym miejscu : /

    Proszę o pomoc.

    ---------- Wpis dodano o 21:44 ---------- Poprzedni wpis dodano o 21:35 ----------

    hmm. zauważyłem, że robię błąd. tak jest poprawniej, ale i tak się nie zmienia. zwalniałem Controller i się do niego odwoływałem :/

    Kod:
    - (IBAction)playGame:(id)sender{    
        Game *Controller = [[Game alloc] initWithNibName:@"Game" bundle:nil];
        self.game = Controller;
        [Controller release];
    
        [menu.view removeFromSuperview];
        [self.view insertSubview:game.view atIndex:0];
     
        NSLog(@"Game.");
    }
    
    Nadal proszę o pomoc.


    ---------- Wpis dodano o 21:57 ---------- Poprzedni wpis dodano o 21:44 ----------

    Tak zadziałało, ale wydaje mi się, że menu.view nadal zjada zasoby.
    Kod:
    - (IBAction)playGame:(id)sender{    
        Game *Controller = [[Game alloc] initWithNibName:@"Game" bundle:nil];
        self.game = Controller;
        [Controller release];
    
        
        [menu.view removeFromSuperview];
        [self.view insertSubview:game.view aboveSubview:self.view];
       // [self.view insertSubview:menu.view belowSubview:game.view];
        NSLog(@"Game.");
    }
    Komputer: MacBook Pro 17 2010 i7 Matt
    Telefon: iPhone 3G 16GB
    Odtwarzacz: iPhone 3G 16GB
    Tablet: The new iPad 32GB WiFi + 4G
    

  7. Avatar tmkszlc
    Dołączył
    Sep 2008
    Skąd
    Koszalin
    Postów
    947

    Cytuj | #7

    jednak chyba racji nie miałem, w helpie jest napisane, że insertSubview: aboceSubview: samo usuwa superview.

    ---------- Wpis dodano o 00:34 ---------- Poprzedni wpis dodano o 00:28 ----------

    okej kolejny problem, menu dziala.

    jak juz gram i klikam pause, to wywoluje funkcje:

    Kod:
    - (IBAction)pause:(id)sender{    
        Pause *Controller = [[Pause alloc] initWithNibName:@"Pause" bundle:nil];
        self.pause = Controller;
        [Controller release];
            
        [self.view insertSubview:pause.view aboveSubview:self.view];
    }
    kiedy klikam resume, ktore jest w oknie PAUSE to wszystko sie resetuje i rozgrywka jest od nowa.

    Kod:
    - (IBAction)resume:(id)sender{
        Game *Controller = [[Game alloc] initWithNibName:@"Game" bundle:nil];
        self.game = Controller;
        [Controller release];
    
        [self.view insertSubview:game.view aboveSubview:self.view]; 
    }
    cos w tej funkcji nie gra. probowalem bez tworzenia controller'a ale nie idzie :/
    Komputer: MacBook Pro 17 2010 i7 Matt
    Telefon: iPhone 3G 16GB
    Odtwarzacz: iPhone 3G 16GB
    Tablet: The new iPad 32GB WiFi + 4G
    

  8. Avatar Roberto
    Dołączył
    Feb 2007
    Skąd
    Wrocław
    Postów
    11,866

    Cytuj | #8

    A czemu ma się nie resetować, skoro tworzysz grę od nowa?
    Radzi bym trochę chociaż poczytać co i jak, zanim się zaczniesz brać za pisanie aplikacji, tym bardziej gier.
    Bo po podejściu z pierwszego posta widać że nie za bardzo.
    Komputer: MacBook Pro 13,3" 2,26GHz (Lion 10.7.3)
    Telefon: iPhone 4S
    Tablet: iPad 2 3G
    dlaczego nie korzystasz z opcji szukaj?
    http://ifiboughtyourappalreadycaniup...acappstore.com

Odpowiedz na ten temat