Я не уверен, что это проблема, но вам не нужно заключать в скобки операторы case.Кроме того, я не понимаю, почему вы сделали переключатель внутри переключателя.Просто сделайте оператор if-elseif-else, это, вероятно, будет легче понять.
Кроме этого, насколько я понимаю, у вас есть контроллер представления с индикатором выполнения и настраиваемым изображением в качестве свойств,и у вас есть методы, которые должны вызываться в ответ на определенные действия (касание или двойное касание customimageview), но они находятся в контроллере представления.Обычный способ решить эту проблему - использовать механизм целевого действия.UIControls реализуют механизм целевого действия, инкапсулируя пары целевого действия и сохраняя их в словаре, определяемом типом события (UIControlEvent).Вот немного более простая версия.
В файле .h для вашего подкласса UIImageView, перед @interface
напишите это:
typedef enum {
ControlEventTap = 0,
ControlEventDoubleTap
} ControlEvent;
Затем в файле .m добавьте это перед@implementation:
@interface TargetActionPair : NSObject {
id target;
SEL action;
}
@property (nonatomic, assign) id target;
@property (nonatomic, assign) SEL action;
@end
@implementation TargetActionPair
@synthesize target, action;
@end
Затем добавьте переменную экземпляра NSMutableArray (но не свойство) и метод - (void)setTarget:(id)t action:(SEL)a forEvent:(ControlEvent)e
в вашу реализацию customimageview.
Метод должен выглядеть следующим образом:
- (void)setTarget:(id)t action:(SEL)a forEvent:(ControlEvent)e {
TargetActionPair *tar_act = [[TargetActionPair alloc] init];
tar_act.target = t;
tar_act.action = a;
// actionsArray is the mutable array instance variable and must be allocated and set in the init method for customimageview.
[actionsArray replaceObjectAtIndex:(NSUInteger)e withObject:tar_act];
[tar_act release];
}
Затем вы можете заменить свой код обработки касания на:
if ([touch view].tag == 555) {
NSUInteger tapcount = [touch tapCount];
if (([alltouches count] == 1) && (tapcount <= [actionsArray count])) {
TargetActionPair *tar_act = [actionsArray objectAtIndex:tapcount-1];
[tar_act.target performSelector:tar_act.action withObject:nil afterDelay:.4];
if (tapcount == 2) {
TargetActionPair *tar_act2 = [actionsArray objectAtIndex:tapcount-2];
[NSObject cancelPreviousPerformRequestsWithTarget:tar_act2.target selector:tar_act2.action object:nil];
}
}
}
С помощью этого кода вы просто устанавливаете цель и действие для каждого события управления в методе viewDidLoad контроллера представлениякоторый содержит customimageview.Поэтому вызовы будут выглядеть следующим образом:
[self.customimageview setTarget:self action:@selector(pumpsingletap) forEvent:ControlEventTap];
[self.customimageview setTarget:self action:@selector(pumpdoubletap) forEvent:ControlEventDoubleTap];
НЕ ЗАБУДЬТЕ освободить actionsArray в вашем методе dealloc и будьте очень осторожны при освобождении контроллера представления, поскольку customimageview не сохраняет его.
Надеюсь, это поможет, удачи в вашем приложении.