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

    Cytuj | #1

    Witam, pracuję nad aplikacją do przetwarzania obrazów 2D i mam problem z rozplanowaniem klas, ponieważ zawsze jak piszę aplikację to wszystko jest w klasie głównej, a próbuję się tego oduczyć. Mianowicie aplikacja ma wyglądać tak:


    Ekran ze startową grafiką. Przeciągasz, wysuwa się menu. Klikasz w opcje i chowa się jedno menu i pokazuje drugie z innymi opcjami, które wykonują działania na obrazku.


    Teraz wygląda to tak:

    ViewController z wczytanym obrazkiem do UIView *appView. w klasie ViewController inicjowane są obiekty MainMenu, EffectsMenu, FiltersMenu, Histogram. Problem polega na tym, że w opcje menu wykonują działania na UIImage wczytanym do appView. Żeby to działało tak jak teraz jestem zmuszony używać NSNotificationCenter przez co funkcje przycisków i tak są w klasie ViewController zamiast w odpowiednich dla nich klasach. W klasach MainMenu, Effects oraz Filters znajdują się tylko 'funkcje' wysylajace notyfikacje o danej nazwie i ViewController je odbiera wywolujac odpowiednia funkcje. Nie tak powinno być. Jak to dobrze zaprojektowac?
    Komputer: MacBook Pro 17 2010 i7 Matt
    Telefon: iPhone 3G 16GB
    Odtwarzacz: iPhone 3G 16GB
    Tablet: The new iPad 32GB WiFi + 4G
    


  2. Avatar wojtkow SM? Tylko S...


    Dołączył
    May 2007
    Skąd
    Poznań
    Postów
    3,620

    Cytuj | #2

    Po raz kolejny przenoszę Twój wątek do odpowiedniego działu! Czy Ty naprawdę nie zauważasz różnicy między Makiem a iOSem ?
    Komputer: MBA 11.6" i7 1.8GHz 4GB RAM 256GB SSD, iMac 27" i7 2.8GHz 8GB RAM 240 GB SSD + 1 TB HDD
    Telefon: iPhone 4
    Odtwarzacz: iPhone 4
    Tablet: iPad (2012) 4G, iPad WiFi
    Moje programy w AppStore:
    iOS => Project Planner | Project Planner HD
    OSX => Project Planner Viewer
    Zgodnie z regulaminem nie udzielam porad poprzez PW - masz pytanie, pytaj na forum.

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

    Cytuj | #3

    A co za problem przekazać ten UIView do tych innych kontrolerów? Inicjujesz, ustawiasz zmienną, pokazujesz.
    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

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

    Cytuj | #4

    @wojtkow, sorki.

    @Roberto, ciężko mi to jakoś zrozumieć. tu napisałem prosty przykład, o który mi chodzi: [Objective C] ViewController.h #import "MainMenu.h" { UIImage *image; MainMenu *_Mai - Pastebin.com . Dzięki za wytłumaczenie.
    Komputer: MacBook Pro 17 2010 i7 Matt
    Telefon: iPhone 3G 16GB
    Odtwarzacz: iPhone 3G 16GB
    Tablet: The new iPad 32GB WiFi + 4G
    

  5. Avatar m1entus
    Dołączył
    Feb 2011
    Skąd
    Kraków, PL
    Postów
    43

    Cytuj | #5

    Sam napisales, ze masz obiekty takie i takie, wiec one musza wykonywac jakas prace, ale musza tez wiedziec na czym ta prace wykonac, wiec musisz im przekazac pewne dane np poprzez wskaznik, delegata, a nie koniecznie systemem notyfikacji... On jest do czego innego.

    A prawdopodobnie to co chcesz osiagnac (wyslac wiadomosci innemu kontrolerowi, a on ma ci dac odpowiedz po zamknieciu okienka) robisz za pomoca delegata
    Ostatnio edytowane przez m1entus ; 14.01.2012 o 17:13
    Komputer: MacBook Pro 13,3" 2,26GHz
    Telefon: iPhone 4 16Gb
    Tablet: iPad 2 16Gb WiFi

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

    Cytuj | #6

    jejku, to chyba podstawy myślenia obiektowego IMO (obiekty współdzielą ze sobą inne obiekty)
    a szczególnie w Obj-C i jego zarządzaniu pamięcią

    Bar - twoje menu z efektami
    ma działać na UIImage - no to ma taką property
    Bar.h
    Kod:
    @interface Bar : NSObject {
    }
    @property (nonatomic, retain) UIImage *image;
    - (void) doSomethingWithImage;
    @end
    Bar.m
    Kod:
    #import "Bar.h"
    @implementation Foo
    @synthesize image = _image;
    - (void) dealloc
    {
        [_image release];
        [super dealloc];
    }
    
    - (void) doSomethingWithImage
    {
        [self.image doSomething];
    }
    @end
    klasa Foo - twój ViewController, będzie mieć w sobie obiekt klasy Bar
    Foo.h
    Kod:
    #import "Bar.h"
    @interface Foo : NSObject {
    }
    @property (nonatomic, retain) UIImage *image;
    - (void) loadBar;
    @end
    Foo.m
    Kod:
    #import "Foo.h"
    @implementation Foo
    @synthesize image = _image;
    - (id) init
    {
        if(self = [super init]) {
            _image = [[UIImage alloc] initWithContentsOfFile:@"fileName"];
        }
    }
    
    - (void) dealloc
    {
        [_image dealloc];
        [super dealloc];
    }
    
    - (void) loadBar
    {
        Bar *bar = [[Bar alloc] init];
        bar.image = self.image; // tutaj siedzi cała magia
        [self addSubview:bar];
        [bar release];
    }
    @end
    tworzysz sobie obiekt klasy Bar, ustawiasz mu odpowiedni UIImage jako jego property (w końcu on ma na nim działać, a to tylko wskaźnik jest) i tyle. dodajesz go.

    kminisz?
    Ostatnio edytowane przez Roberto ; 14.01.2012 o 13:09
    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

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

    Cytuj | #7

    @m1entus, tak myślałem, ale nie wiedziałem jak się za to zabrać. Teraz pomyślałem po nocce i skumałem tak myślę, przynajmniej na przykładzie mi to działa, zobaczymy jak to wyjdzie w praniu. zaraz wrzucę kawałek kodu dla potomnych.

    ---------- Wpis dodano o 16:29 ---------- Poprzedni wpis dodano o 16:27 ----------

    @Roberto, zaraz przestudiuję twój kod.

    ---------- Wpis dodano o 16:52 ---------- Poprzedni wpis dodano o 16:29 ----------

    @Roberto, dzięki, w końcu to zrozumiałem, to była moja największa bolączka jak do tej pory. Ja zrobiłem to za pomocą delegatów, ale było więcej roboty niż u ciebie. +1
    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,859

    Cytuj | #8

    bo uczyć się należy od podstaw.

    oczywiście można zrobić to przy pomocy delegatów.
    nie wiem co miałoby więcej sensu w sumie. tak dla purystów ;]

    różnica byłaby tylko taka, że linijka:
    Kod:
    bar.image = self.image;
    zamieniłaby się na
    Kod:
    bar.delegate = self;
    i w wywołaniu byłoby tylko
    Kod:
    - (void) doSomethingWithImage
    {
        if ([self.delegate respondsToSelector:@selector(imageToEdit)]]) {
            [[self.delegate imageToEdit] doSomething];
        }
    }
    oczywiście dodanie jeszcze jakiś pierdół (@property delegate, metody imageToEdit)
    więc bez przesady z tym 'więcej roboty'
    Ostatnio edytowane przez Roberto ; 14.01.2012 o 15:05
    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

  9. Avatar m1entus
    Dołączył
    Feb 2011
    Skąd
    Kraków, PL
    Postów
    43

    Cytuj | #9

    Wszystko w zależności co chcemy osiągnąć bo jeśli mamy powiedzmy jakiś popup w sensie ustawienia(view controller) i chcemy po zamknieciu ustawien pobrac dane zwrotne uzywamy wtedy delegata, natomiast w powyzszym przypadku jest to bez sensu. Dlatego jak najbardziej mozna ustawic obrazek klasie ktora ma go uzywac, a najlepiej go przekazac poprzec konstruktor [[Bar alloc]initWithImage:image] i wszystko w tym temacie

    Btw. @tmkszlc polecam przejzec jakies materialy na temat programowania objektowego, bedzie ci duzo latwiej
    Ostatnio edytowane przez m1entus ; 14.01.2012 o 17:24
    Komputer: MacBook Pro 13,3" 2,26GHz
    Telefon: iPhone 4 16Gb
    Tablet: iPad 2 16Gb WiFi

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

    no tutaj w sumie można się pokusić o taki inicjalizator (tylko akurat tutaj to chyba raczej initWithFrame:andImage: ) bo ten obrazek jest kluczowy w tym widoku ;]
    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
Strona 1 z 2 1 2 OstatniaOstatnia