2010-09-27 1 views
0

Я создаю приложение, которое в основном является расширением учебника (я очень новичок в мире разработки приложений). В учебнике была коробка с голубым цветом, движущаяся по экрану до точки, где вы касаетесь.Приложение для iPhone: создайте объект каждую секунду

То, что я сделал, это изменить фон на ImageView, чтобы он выглядел как глубокое море, и я поставил ImageView внутри голубого UIView, чтобы отобразить белый силуэт дайвера.

Я хочу, чтобы этот эксперимент/упражнение вызывал появление пузырьков и исчезал каждые две секунды как от дайвера, так и от водорослей в нижней части экрана.

Я установил свой таймер, используя этот Quickie link, но я получаю всевозможные ошибки из декларации NSTimer.

Вот мой код:

NSTimer *bubbleTimer; 

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

Линия NSTimer * bubbleTimer; не окрашивает NSTimer, и ошибка говорит о том, что он по умолчанию использует bubbleTimer для int.

Как я уже сказал, я все еще пытаюсь найти мои ноги в этом мире, так что любая помощь вы можете дать будет оценено

EDIT:

вот мой .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 

и мой .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

Выглядит нормально. Это файл .m obj-c и содержит соответствующие заголовки? Возможно, поделитесь всем методом. – Eiko

ответ

1

Может быть ваше форматированием, но Уры NSTimer создан в методе? Похоже, что он плывет сам по себе.

+0

Нет, это не так, я думал, что если я объявлю это вне метода, он сделает это автоматически без каких-либо запусков (например viewDidLoad или что-то еще). Я попытаюсь объявить это в другом методе, чтобы узнать, помогает ли это ...(Переключение между языками грубо, я попадаю во все мои привычки к AS3 и PHP) –

+0

спасибо, это исправлено. Cheers –

+0

np, если вы хотите объявить его при загрузке, выполните его в методе init. - (id) init и убедитесь, что вы вернули себя. Будут примеры в сети правильной структуры метода init, если вы хотите сделать предпочтительный путь. – Rudiger

1

Похоже, вы пропустили импорт.

#import <Foundation/NSTimer.h>

1

Вы в том числе, по крайней мере следующий заголовок в верхней части файла:

#import <Foundation/Foundation.h> 

и связь с рамками Фонда?

Связанные: см полезно ответ от другого переполнения стека post

+0

Я добавил это в мой .h-файл, и теперь у меня нет определения типа или класса хранения –

0

Код, который вы отправили, не будет работать, поскольку вы выполняете инициализацию переменной экземпляра bubbleTimer вне метода экземпляра. Просто вызовите метод scheduleTimer:, когда вы хотите, чтобы таймер запустился, но изнутри другого метода экземпляра (например, touchhesBegan: может быть? Но будьте осторожны или вы продолжите порождать таймеры ...), а не в открытом виде, как статическая инициализация переменных.

Смежные вопросы