2011-08-27 15 views
5

Jestem nowy w firmie Cocoa i poszukuję porady na temat aplikacji od doświadczonych kakaorzy.Porady dotyczące aplikacji do rysowania kakao

Buduję podstawową aplikację typu OmniGraffle, w której obiekty są rysowane/przeciągane na płótno. Po umieszczeniu obiektów na płótnie można je wybrać, aby zmodyfikować ich właściwości (kolor wypełnienia, kolor/szerokość obrysu itd.), Zmienić rozmiar, przesunąć do nowej pozycji itp.

Aby się rozgrzać, Napisałem podstawową aplikację do rysowania, która tworzy obiekty (okręgi, prostokąty itp.), Jak rysuje mysz na niestandardowym NSView, dodaje obiekty do kolekcji NSArray i renderuje zawartość kolekcji do widoku. Mógłbym kontynuować w tym duchu, ale będę musiał dodać obsługę wykrywania obiektów, rozwiązywania z-indeksowania, podświetlania fokusa, przeciągania uchwytów itp. Z wszystkimi powiązanymi renderingami. Co więcej, renderowanie każdego obiektu w każdym cyklu wydaje się strasznie marnotrawstwem.

Wygląda na to, że lepszym rozwiązaniem byłoby upuszczenie lekkich obiektów widoku na płótno, które było w stanie wykryć zdarzenia myszy, narysować siebie i ich pierścienie ostrości, i tak dalej. Jednak, podczas gdy NSView wydaje się być obiektem o tych właściwościach, widzę dużo gadania w sieci o tym, że jest to komponent wagi ciężkiej z dużym bagażem. Natknąłem się na NSCell s i przeczytałem o nich, ale nie jestem pewien, czy są one właściwą alternatywą.

Wszelkie sugestie? Jeśli możesz mnie popchnąć we właściwym kierunku, bardzo bym to docenił.

+0

Zdecydowanie odradzam używanie 'NSCell'. Nawet 'NSTableView' odszedł od niego w swojej najnowszej iteracji. 'NSCell' nie jest fajnie pracować. –

+1

Chciałbym także * gorąco * polecić spojrzenie na przykład szkicu (myślę, że obecny nazywa się "Szkic + dostępność", jeśli przeszukujesz dokumenty), jeśli jeszcze tego nie zrobiłeś. Jest tam wiele dobrych pomysłów. –

Odpowiedz

3

Pierwsza zasada optymalizacji: nie rób tego w pierwszej kolejności.

Niestandardowy NSView na kształt brzmi właściwie dla mnie. Niezależnie od tego, czy chcesz mieć różne podklasy dla różnych kształtów, będziesz zależał od Ciebie; Zaczynałem od pojedynczej ogólnej klasy widoku kształtu i kształtów, które mogłyby opisywać siebie jako ścieżki Béziera, ale nie bądź zbyt surowy w tym, żeby się do tego trzymać - zmień to, jeśli byłoby to łatwiejsze. Wystarczy go zaimplementować, ale ma to dla ciebie sens.

Następnie, po uruchomieniu, zrób profil. Wykonaj jak najwięcej kształtów, jak tylko możesz. Następnie zrób więcej. Kształty o wysokiej liczbie zliczeń. Skrzyżowania. Wypełnienia, kreski, cienie i gradienty. Prawdopodobnie powinieneś stworzyć oddzielny dokument dla każdego stresora. Zwróć uwagę tylko na poziomie użytkownika, co jest wolne. Następnie uruchom aplikację pod Instruments i sprawdź, dlaczego jest wolna.

Może poglądy staną się złym rozwiązaniem. Nie zapomnij zajrzeć do CALayers. Ale nie wykluczaj niczego tak powolnego, dopóki nie spróbujesz tego i zmierzysz.

+0

Cóż, wszystko zależy od typowego przypadku użycia - jeśli aplikacja zwykle obsługuje tysiące obiektów, wolę unikać tysięcy instancji NSView i wybrać inny projekt z góry. – Jay

Powiązane problemy