Gui și "Coca" a crea o aplicatie GUI pentru Mac OS X
Ultima dată când v-ați întâlnit cu crearea unui simplu consolă aplicație pentru Mac OS X utilizând cadrul de limbaj Objective-C și cacao. Dar, desigur, mult mai bine să aibă în aplicațiile lor o interfață grafică completă. De data aceasta vom vorbi despre crearea unei interfete grafice-aplicații folosind toate același cacao și Obiectiv-C.
Mai întâi a fost proiectul
Fiecare produs software în lumea modernă începe cu crearea proiectului pentru mediul în care se va dezvolta în continuare.
Proiectul - este, după cum știți, o colecție de diverse elemente, care sunt folosite pentru a construi aplicația: fișierele sursă, fișiere cu descrierea interfeței cu utilizatorul, sunete, imagini, link-uri pentru a utiliza cadre și biblioteci, etc. etc.
Cel mai comun tip de software care este creat prin utilizarea XCode - aceasta, desigur, cererea. Dar cererea - nu singurul lucru pe care le puteți crea cu ajutorul acestui IDE. În plus, este posibil să se colecteze, de exemplu, instrumente de linie de comandă, cadru, plugin-uri, biblioteci și extensii de nucleu - kext'y, precum și pentru aplicația pentru iOS.
Să încercăm să o urmeze pentru a crea o aplicație în XCode de la început până la sfârșit. Primul lucru pe care avem nevoie - este, așa cum ați ghicit deja, pentru a crea un proiect.
Pentru a face acest lucru, executați XCode (în cazul în care sistemul XCode nu este instalat, îl puteți descărca gratuit de pe site-ul Apple).
Pentru a crea un nou proiect, accesați meniul principal Fișier -> New Project. După cum vedeți, aici se află o mulțime de diferite tipuri de proiecte. Avem nevoie de aplicații de cacao - aplicație GUI care utilizează cacao cadru.
După ce alegeți un șablon pentru proiect și localizarea acestuia, de a crea fișierele de proiect Xcode, și chiar a scrie câteva linii de cod pentru tine.
Iată-le:
Punctul de intrare al aplicației noastre
#import
int main (int argc, char * argv [])
întoarce NSAppliction (argc, (const char **) argv);
>
Suntem interesați funcția de apel NSApplication. După transferul gestionării funcțiilor aplicației este inclusă în bucla mesaj al sistemului. Acest „pasiv“ unelte de comportament (de așteptare de notificare din sistem) - standard pentru sisteme multi-tasking de astăzi.
Dacă încercați să construiască și să rulați proiectul (Build -> Build and Go), veți vedea o fereastră goală. De unde provine? La urma urmei, nici un cod pentru a crea, nu am fost contactat? Uită-te la fișierele noastre de proiect.
OK. Acum, să ne lucreze un pic în IB și să distribuie această formă de control.
construi interfață
Să ne uităm la modul de a schimba aspectul ferestrei principale a programului. Du-te la Tools -> Library (Rețineți că meniul principal este acum schimbat, deoarece nu suntem noi în Xcode, Interface Builder și în) și a vedea tot felul de controale pe care le puteți plasa pe formular simplu dran-and-drop'om . Voi arunca pe fereastra cele trei casete de text, un cuplu de câmpuri text statice și un singur buton. Asigurați-vă un calculator simplu că, atunci când faceți clic pe butonul adaugă valorile din două câmpuri de text și ieșiri rezultatul în al treilea. Este necesar să se înceapă undeva :).
Pentru a controla setările folosite „Object Inspector» (Tools -> Inspector). În fereastra sa afișează proprietățile de control selectate, și pot fi editate. Deci, cu ajutorul inspectorului am întrebat butoanele de titlu și ferestrele.
Ei bine, bine. Interfața avem, și dacă vom colecta și a alerga proiectul, veți vedea pe ecran forma, cum ar fi l-am creat folosind Interface Builder. Dar ce putem spune despre logica aplicației noastre? Cum de a crea stivuitoare pentru evenimentele care provin din controalele și schimba aspectul aplicației noastre în codul? Și aici este locul unde începe distracția ... Avem nevoie de a integra interfața noastră și de aplicare.
Pentru a face acest lucru, creați o fereastră controler de clasă. Această clasă va conține mesajul de manipulatorii forme de control și de a schimba aspectul lor. Du-te înapoi la Xcode (nu uitați că suntem tot timpul de lucru în Interface Builder?) Și vom crea o clasă numită AppConroller (File -> New File -> Cacao -> Obiectiv-C clasa). XCode creează două fișiere AppController.h și AppController.m cu controlerul de interfață și punerea în aplicare de clasă, respectiv, pentru noi. Există o problemă - Generatorul de interfață a clasei noastre nu știe nimic AppController, și vom avea pentru a lega domeniile de interfață obiect și metode AppController'a. Trageți AppController.h InterfaceBuilder la fereastra principală. Acum procedura. Dar totuși ceva lipsea. Aha! Clasa este, ca un obiect al acestei clase nr. Noi mergem în Interface Builder -> Instrumente -> Biblioteca -> obiect și trageți obiecte din paleta pe principalul constructor fereastra. Utilizați Inspector pentru a informa Builder, este - o clasă obiect AppController.
Acum, toate informațiile necesare se află în MainMenu.xib, iar la începutul mediului nostru de execuție aplicație prin descărcarea fișierului, care conține descrierea interfeței, de a crea un obiect al clasei noastre, și configurați-l în mod corespunzător.
În cele din urmă, codificarea
După o formoshlepstvom peste, este timpul pentru a scrie un pic de cod care va fi responsabil pentru comportamentul cererii.
Cod Clasa AppController
// clasa de interfață
// Includeți Cocoa.h
#import
@interface AppController. NSObject
// Link-uri la trei câmpuri de text.
// Valoarea care urmează să fie alocate
// timpul rulării.
IBOutlet NSTextField * FirstNumber;
IBOutlet NSTextField * SecondNumber;
IBOutlet NSTextField * Rezultat;
>
// handler clic pe un singur buton
// cererea noastră
- (IBAction) buttonClick: (id) expeditor;
@end
// Implementare Clasa
#import "AppController.h"
@implementation AppController
// handler este foarte simplu de clicuri
- (IBAction) buttonClick: (id) expeditor
// Obține valorile celor două câmpuri de text și
// le atribuie o a treia sumă
[Rezultat setIntValue:
[FirstNumber intValue] +
[SecondNumber intValue]];
>
@end
- deschide meniul contextual pentru AppController obiectului InterfaceBuilder'e;
- Începem în scădere de la noi Magazine de control sootvetstujushchie și IBAction - buton.
Ei bine, în cele din urmă megaprilozhenie nostru gata. Dați clic pe «Build și Du-te» și a vedea ce urmează.
Apropo, un punct important: metodele și funcțiile de cacao nu arunca excepții, astfel încât nu se așteaptă ca această aplicație va scădea, dacă ai în loc de întregul număr trebuie să aducă linia de litere. Prelucrarea de valori incorecte în acest caz - problema programator (dar mai mult pe altă dată).
grafică de cuarț
Astfel, componentele standard pe forma vom arunca învățat, și chiar a învățat cum să se ocupe de evenimentele de la ei si schimba starea lor de cod. Ei bine, ce se întâmplă dacă se dorește controlul în bibliotecile standard, nu au? Dacă doriți să atragă ceva neobișnuit pe formular? De fapt, aceasta este o aplicație grafică :). Desigur, în Mac OS X pentru a face posibilă, și, cu ajutorul cacao.
Pentru a desena grafice în Mac OS X utilizând un vector dvezhok Quarz. Pentru a face propria 2D-scena, avem nevoie pentru a crea o vedere de clasă, moștenitorul NSView. Vom avea nevoie pentru a trece peste metoda drawRect în această clasă.
Pentru a face propria 2D scenă avem nevoie pentru a crea o clasă de vizionare
XCode creează două fișiere pentru noi - MyView.h și MyView.m interfața șablon și punerea în aplicare a clasei noastre, respectiv. MyView.h începe abandon din lista de fișiere de proiect în fereastra principală a Interface Builder. Acum, alege dintr-o paletă de controale Biblioteca CustomView, trageți-l pe formularul nostru și cere fereastra de inspector pentru acest MyView de control ca o clasă de bază. Setați înălțimea egală cu lățimea formei (ne util pentru prevenirea distorsionării în acest exemplu particular). Acum trebuie să aibă grijă cu privire la aspectul controlului nostru. Desenați ceva frumos, cum ar fi yin-yang monada. Toate liniile (cale) vor fi create cu ajutorul curbelor Bezier. Acest lucru ne va ajuta la cacao clasa NSBezierPath.
Clasa de MyView Implementare
// headerul Import
// El a creat pentru noi XCode
// Nu e nimic nu ne vom schimba în acest moment.
#import "MyView.h"
@implementation MyView
// Acest cod creează, de asemenea, XCode
// Și aici, de asemenea, nu se va schimba nimic :)
- (Id) initWithFrame: (NSRect) frame self = [super-initWithFrame: cadru];
în cazul în care (auto) // Inițializarea codul aici.
>
întoarce de sine;
>
// Dar în metoda de redare
// scriem codul nostru
// 2D-scenă
- (Void) drawRect: (NSRect) RECT
// Setați culoarea gri pentru pensula
[[NSColor grayColor] set];
// Umple întreaga regiune accesibilă pentru noi
NSRectFill (RECT);
// Ne înscriem zona noastră dreptunghiulară a unui cerc
NSBezierPath * cerc =
[NSBezierPath bezierPathWithOvalInRect: RECT];
// Setați grosimea liniei
[Circle setLineWidth: 2,0];
// umplere va fi de culoare albă
[[NSColor whiteColor] set];
[Cercul de umplere];
// Și acum pentru granița negru
[[NSColor blackColor] set];
// frontieră Otrisuem
[Circle accident vascular cerebral];
// Aceste valori sunt foarte utile pentru noi; ca nu cumva // Partea întunecată a monadelor // Cea mai mare parte a arcului // mic arc superior // fund mic arc // Umple negru // mic cerc negru // mic cerc alb Acum știi cum să creați GUI'shnoe cacao aplicației. Procesul de dezvoltare pentru iOS pentru iPhone și iPad-uri la fiecare nu cu mult diferite de la crearea de aplicații desktop pentru MacOS, care este descrisă aici, așa că du-te pentru ea. Mult noroc! Arată acest articol unui prieten:
// Cchitaetsya-le de fiecare dată, face aici
float center_x = rect.size.width / 2,0;
float center_y = rect.size.height / 2,0;
Centrul NSPoint =;
NSPoint center_up =;
NSPoint center_dn =;
float raza =
center_x
NSBezierPath * black_side =
[NSBezierPath bezierPath];
[Black_side appendBezierPathWithArcWithCenter:
centru
Raza: Raza
startAngle: 90
endAngle: 270
în sens orar: YES];
[Black_side appendBezierPathWithArcWithCenter:
center_up
Raza: Raza / 2
startAngle: 270
endAngle: 90
în sens orar: NO];
[Black_side appendBezierPathWithArcWithCenter:
center_dn
Raza: Raza / 2
startAngle: 270
endAngle: 90
în sens orar: YES];
[[NSColor blackColor] set];
[Black_side umple];
[[NSBezierPath bezierPathWithOvalInRect:
NSMakeRect (center_x - raza / 6.0,
center_y - raza * (0,5 + 1 / 6,0)
raza / 3.0, raza / 3.0)] umple];
[[NSColor whiteColor] set];
[[NSBezierPath bezierPathWithOvalInRect:
NSMakeRect (center_x - raza / 6.0,
center_y + radius * (0,5 - 1 / 6.0)
raza / 3.0, raza / 3.0)] umple];
>
@endconcluzie