Hur man styr View i din iPad App

June 18

När du skapar din iPad app, måste du inkludera kod som styr uppfattning i denna app. Följande exempel iPad app är utformad för att visa ord rullning nerför skärmen. Efter att ha öppnat DeepThoughtsViewController.m filen så att den visas i textredigeraren, skulle du infoga koden i fetstil (koden som inte är i fetstil levereras av View-baserad applikation mall):

#import "DeepThoughtsViewController.h"
#import "Constants.h"
implementation DeepThoughtsViewController
synthesize hastighet, Imageview;
#pragma märke -
#pragma märke Visa livscykel
/ *
// Den utsedda initialiseraren. Åsido att utföra installationen som krävs innan utsikten är laddad.
- (Id) initWithNibName: (NSString *) nibNameOrNil bunt: (NSBundle *) nibBundleOrNil {
om (själv = [super initWithNibName: nibNameOrNil bunt: nibBundleOrNil]) {
// Anpassad initiering
}
tillbaka själv;
}
* /
/ *
// Genomföra loadView att skapa en vy hierarki programmering, utan att använda en spets.
- (Void) loadView {
}
* /
/ *
// Implementera viewDidLoad att göra ytterligare inställningar efter laddning av utsikten, vanligtvis från en spets.
- (Void) viewDidLoad {
[Super viewDidLoad];
}
* /
- (Void) viewDidLoad {

[Super viewDidLoad];
[NSTimer scheduledTimerWithTimeInterval: 0,5 mål: självväljare:selector (OnTimer) Userinfo: noll upprepningar: JA];
if ([[NSUserDefaults standardUserDefaults] objectForKey: kWordsOfWisdom]!) {
[[NSUserDefaults standardUserDefaults] setObject: @ "Peace Love Groovy Music" forKey: kWordsOfWisdom];
fallingWords = @ "Peace Love Groovy Music";
}
else {
fallingWords = [[NSUserDefaults standardUserDefaults] stringForKey: kWordsOfWisdom];
}
if ([[NSUserDefaults standardUserDefaults] objectForKey: kSpeed]!) {
[[NSUserDefaults standardUserDefaults] setDouble: 10,0 forKey: kSpeed];
hastighet = kMaxSpeed-10.0;}
else {
hastighet = kMaxSpeed ​​- [[NSUserDefaults standardUserDefaults] doubleForKey: kSpeed];
}
}
#pragma märke -
#pragma varumärket Animation
- (Void) OnTimer {

UILabel * fallingImageView = [[UILabel alloc] initWithFrame: CGRectMake (0, 0, 100, 30)];
fallingImageView.text = fallingWords;
fallingImageView.textColor = [UIColor purpleColor];
fallingImageView.font = [UIFont systemFontOfSize: 30];
fallingImageView.backgroundColor = [UIColor clearColor];

fallingImageView.adjustsFontSizeToFitWidth = JA;

int startx = round (random ()% 400);
int endX = round (random ()% 400);
// Hastighet fallande
dubbel randomSpeed ​​= (1 / round (random ()% 100) +1) * hastighet;
// Bildstorlek;
dubbel scaleH = (1 / round (random ()% 100) +1) * 60;
dubbel scaleW = (1 / round (random ()% 100) +1) * 200;

[Self.view addSubview: fallingImageView];

fallingImageView.frame = CGRectMake (startx, -100, scaleW, scaleH);

fallingImageView.alpha = 0,75;

[UIView beginAnimations: noll sammanhang: fallingImageView];
[UIView setAnimationDuration: randomSpeed];
[UIView setAnimationDelegate: self];
[UIView setAnimationDidStopSelector:selector (animationDone: klar: kontext :)];

fallingImageView.frame = CGRectMake (endX, self.view.frame.size.height, scaleW, scaleH);

[UIView commitAnimations];
}
- (Void) animationDone: (NSString *) animationID klar: (NSNumber *) färdiga sammanhang: (id) kontext {
UIImageView * fallingImageView = kontext;
[FallingImageView removeFromSuperview];
[FallingImageView utgåvan];
}
#pragma märke -
Kontroller #pragma märke
- (IBAction) inställningar {
}
#pragma märke -
#pragma märke Orientering
// Åsido att tillåta andra än standard stående orientering orientering.
- (BOOL) shouldAutorotateToInterfaceOrientation: (UIInterfaceOrientation) interfaceOrientation {
återvända JA;
}
#pragma märke -
#pragma märke Memory Management
- (Void) didReceiveMemoryWarning {
// Frigör uppfattning om den inte har en Super.
[Super didReceiveMemoryWarning];
// Släpp alla cachade data, bilder, etc som inte är i bruk.
}
- (Void) viewDidUnload {
// Släpp varje kvar subviews i huvudvyn.
// T.ex. self.myOutlet = noll;
}
- (Void) dealloc {
[Super dealloc];
}
end

Här är en uppdelning av koden du lägger:

  • Det första påståendet du lägger importen till Constants.h filen. Nu kan du använda några knappar du ställer upp med NSUserDefaults i den efterföljande koden för att hämta användarinställningarna.
  • Objective-C skapar Åtkomstmetoder du behöver för dig när du inkluderar ensynthesize uttalande; uttalandet i föregående kod skapar en åtkomstmetod för varjeproperty deklaration (hastighet och Imageview).
  • De två # uttalanden pragma mark innehåller initieringen och last vykod.
  • Den viewDidLoad meddelandet skickas direkt efter vyn har laddats ur nib filen (den .xib fil du kan ändra i Interface Builder). Detta är den plats där du sätter din kod för vyn initiering, vilket i detta fall innebär att man visar DeepThoughts "fallande ord. Den viewDidLoad metod du införas börjar genom att inrätta en timer för intervallet mellan varje visning av fallande ord.

    Du använder NSTimer klassen att skapa timers. En timer väntar tills ett visst tidsintervall har löpt ut och sedan bränder, skicka ett angivet meddelande till ett målobjekt. Denna kod använder scheduledTimerWithTimeInterval: Mål: väljare: Userinfo: upprepar: klassmetod för att skapa timern och schemalägga det på den aktuella körningen slingan i standardläget. Intervallet är 0,5 sekunder, målet är själv, och väljaren är budskapet att skicka till målet när timern bränder - i det här fallet, OnTimer. Den Userinfo är användarens info för timern (inställd på noll), och timern är inställd på att upprepa - det vill säga, kommer det upprepade gånger boka om sig själv tills ogiltig.
  • Därefter kontrollerar koden för att se om inställningen kWordsOfWisdom har flyttat in NSUserDefaults.
  • Koden flyttar användarens preferenser i NSUserDefaults först efter programmet körs för första gången. Om inställningarna inte har flyttat in NSUserDefaults ännu, koden använder initialpreferensvärde ("Peace Love Groovy Music") för fallingWords. Om inställningarna har flyttat in NSUserDefaults, koden läser dem och sedan sätter fallingWords till vad användarens önskemål är. Koden upprepar sedan denna kontroll med hastighetsinställningen.

    Du använder standardUserDefaults (en NSUserDefaults klassmetod) för att få tillgång till de vanliga standardinställningar, och du kan lagra data där.
  • De #pragma märke avsnittet Kontroller inkluderar platshållare inställningar metoden för att ansluta ljus Info knappen till View Controller. Detta är åtgärden metod som använder IBAction kval.
  • Anslutning timern till själva ritningen av displayen är OnTimer metoden. Den UILabel klass implementerar en skrivskyddad text vy. Du kan använda den här klassen för att rita en eller flera rader med statisk text. I detta fall kodblocket använder initWithFrame metoden med CGRectMake att skapa en rektangel, med x-koordinaten och y-koordinat på rektangelns ursprungspunkten vid (0, 0) och en specificerad bredd och höjd (100, 30) .
  • Koden omvandlar fallingWords strängen till fallingImageView för visning; ställer in textfärg, typsnitt och bakgrundsfärg; och justerar teckenstorleken för bredden. De typsnitt och textcolor egenskaper gäller för hela textsträngen.
  • Nästa kodblock använder slumpfunktion för start- och slutpunkter (startx och endX), för hastighet, och för bredden (scaleW) och höjd (scaleH) för fallingImageView.
  • Den beginAnimations: kontext: metoden startar animeringen blocket, och commitAnimations metoden avslutar blocket. Inne i blocket, sätter koden fastighetsvärden att göra synförändringar som utgör animeringen.
  • Den setAnimationDuration Metoden sätter animering varaktighet och setAnimationDidStopSelector sätter budskap till animeringen delegaten när animeringen stannar. Animationen delegaten är animationDone, som använder removeFromSuperview (en förekomstmetod av UIView klass) för att ta bort fallingImageView och sedan använder utgåva (en förekomstmetod av NSAutoreleasePool klass) för att frigöra fallingImageView.
  • Slutligen har den här koden två # pragma mark uttalanden att markera avsnittet som Orientering och ytterligare två # pragma markera uttalanden ovanför didReceiveMemoryWarning metod för att markera det avsnittet som minneshantering.