Приложение для iPhone: создание объекта каждую секунду - PullRequest
0 голосов
/ 27 сентября 2010

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

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

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

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

Вот мой код:

NSTimer *bubbleTimer;

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

Линия NSTimer * bubbleTimer; не окрашивает NSTimer, и ошибка говорит, что это defaultBubTimer к int.

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

РЕДАКТИРОВАТЬ:

вот мой .ч

#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

и мой .м

#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

Ответы [ 4 ]

1 голос
/ 27 сентября 2010

Включаете ли вы хотя бы следующий заголовок вверху файла:

#import <Foundation/Foundation.h>

и связь с платформой Foundation?

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

1 голос
/ 27 сентября 2010

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

1 голос
/ 27 сентября 2010

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

#import <Foundation/NSTimer.h>

0 голосов
/ 27 сентября 2010

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

...