Для этого, пока я правильно истолковал ваш вопрос, вы говорите, что у вас есть 3 объекта, которые имеют некоторые незначительные общие функции. Я хотел бы абстрагировать общую функциональность в базовый класс, а затем 3 других класса наследовать от базового класса.
Таким образом, у вас есть ScenarioBase, у которого есть общая функциональность, такая как свойство таймера, функция startTimer, функция stopTimer, функция обратного отсчета, переменная startTime, а затем, вероятно, протокол делегата для completeScenario (это вызывает dismiss в вашем контроллере модального представления) .
@protocol CompletedScenarioDelegate : NSObject
-(void)scenarioIsComplete;
@end
@interface ScenarioBase : UIViewController <CompletedScenarioDelegate> {
NSTimer *timer;
int startingTime;
}
@property (nonatomic, retain) NSTimer *timer;
@property (nonatomic, readwrite) int startingTime;
-(void)startTimer;
-(void)stopTimer;
-(void)countdown;
@end
Теперь у вас есть 3 сценария, которые вы хотите реализовать.
Определение класса, вероятно, будет выглядеть примерно так:
@interface Scenario1 : ScenarioBase {
UIImageView *puzzleBackground; //I don't really know what you want as members
//Lets say this is a custom background for the puzzle
}
@end
Затем вы реализуете код для своей пользовательской головоломки, устанавливаете ее startTime в его init, вызываете его унаследованную функцию startTimer и все готово. Вы можете реализовать функциональность по умолчанию в родительском классе для sceneIsComplete, возможно, что-то вроде
-(void)scenarioIsComplete {
UIViewController *vc = [(ScenarioAppDelegate)([[UIApplication sharedApplication] delegate]) viewController];
[vc dismissModalViewController];
}
и это будет обрабатывать увольнение для всех дочерних сценариев.