2010-09-27 10 views
0

Je crée une application qui est essentiellement une extension d'un tutoriel (je suis très nouveau dans le monde du développement d'applications). Le tutoriel avait une boîte de couleur cyan se déplaçant autour de l'écran au point où vous touchez. Ce que j'ai fait a été de changer l'arrière-plan en un ImageView afin qu'il ressemble à la mer profonde et j'ai mis un ImageView dans le UIView cyan pour afficher la silhouette blanche d'un plongeur. Ce que je veux de cette expérience/exercice est de faire apparaître et disparaître des bulles toutes les deux secondes, à la fois chez le plongeur et l'algue en bas de l'écran.Application iPhone: Créer un objet toutes les secondes

Je configure mon minuteur en utilisant ce Quickie link mais je reçois toutes sortes d'erreurs de la déclaration NSTimer.

Voici mon code:

NSTimer *bubbleTimer; 

bubbleTimer = [NSTimer scheduledTimerWithTimeInterval: 0.5 
            target: bubble 
            selector: @selector(moveBubble:) 
            userInfo: nil 
            repeats: YES]; 

La ligne NSTimer * bubbleTimer; ne colore pas le NSTimer, et une erreur indique qu'il est par défaut bubbleTimer à un int.

Comme je l'ai dit, je suis encore à essayer de trouver mes pieds dans ce monde de sorte que toute aide que vous pouvez donner sera apprécié

EDIT:

ici est mon .h

#import <UIKit/UIKit.h> 
#import <Foundation/Foundation.h> 

@interface TouchView : UIView { 

IBOutlet UIView *stretchView; //This defines an object in Interface Builder called stretchView 
IBOutlet UIView *bubble; 
NSTimer *bubbleTimer; 
} 

@end 

et mon .m

#import "TouchView.h" 


@implementation TouchView 

//First we need a method that processes each touch of the screen 
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{ 

//Begin an animation - The animation is given a name which in this case is 
//Move and Stretch 
[UIView beginAnimations:@"MoveAndStretch" context:nil]; 
//We set a duration for this animation in seconds 
[UIView setAnimationDuration:1]; 
//Start the animation from the screen's current state 
[UIView setAnimationBeginsFromCurrentState:YES]; 
//Any location changes between here and Commit Animations is animated. 
//Firstly we need to process a simple touch which 
if([touches count] == 1) { 
    //make a single touch variable 
    UITouch *touch = [touches anyObject]; 
    //change the location of stretchview to the location of the touch 
    stretchView.center = [touch locationInView:self]; 
} 
[UIView commitAnimations]; 
} 

- (void)moveBubble:(NSTimer *)theTimer { 
CGPoint start; 
start.x=480; 
start.y=300; 
CGPoint end; 
end.x=0; 
end.y=300; 
bubble.center=start; 
[UIView beginAnimations:@"Bubble" context:nil]; 
[UIView setAnimationDuration:2]; 
[UIView setAnimationBeginsFromCurrentState:YES]; 
bubble.center=end; 
[UIView commitAnimations]; 
} 

bubbleTimer = [NSTimer scheduledTimerWithTimeInterval: 0.5 
                 target: self 
                 selector: @selector(moveBubble:) 
                  userInfo: nil 
                  repeats: YES]; 

@end 
+0

Ça a l'air ok. Est-ce un fichier .m-obj et inclut les en-têtes appropriés? Peut-être partager toute la méthode. – Eiko

Répondre

1

pourrait être votre mise en forme, mais ur NSTimer créé dans une méthode? Il semble être flottant par lui-même.

+0

non ce n'est pas, je pensais que si je déclarais en dehors d'une méthode, il le ferait automatiquement sans aucun déclenchement (comme viewDidLoad ou quelque chose comme ça). Je vais essayer de déclarer cela à l'intérieur d'une méthode différente pour voir si cela aide ...(Le basculement entre les langues est rude, je tombe dans toutes mes habitudes AS3 et PHP) –

+0

merci, cela l'a corrigé. Salutations –

+0

np, si vous voulez le déclarer quand il charge le faire dans la méthode init. - (id) init et assurez-vous de revenir sur vous-même. Il y aura des exemples sur le net de la structure correcte de la méthode init si vous voulez faire le chemin préféré. – Rudiger

1

Sons comme vous manque une importation.

#import <Foundation/NSTimer.h>

1

-vous dont au moins l'en-tête suivant en haut de votre fichier:

#import <Foundation/Foundation.h> 

et la liaison avec le cadre Fondation?

connexes: voir réponse utile d'un autre débordement de la pile post

+0

J'ai ajouté cela à mon fichier .h et maintenant je reçois une définition de données n'a aucun type ou classe de stockage –

0

Le code que vous avez affiché ne fonctionnera pas car vous effectuez une initialisation de la variable d'instance bubbleTimer en dehors d'une méthode d'instance. Appelez simplement la méthode scheduledTimer: lorsque vous voulez que la minuterie démarre, mais à partir d'une autre méthode d'instance (comme touchesBegan: peut-être? Mais attention ou vous continuerez à générer des minuteurs ...) et non à l'ouverture comme un initialisation de variable statique.