как сделать так, чтобы изображение меняло альфа-канал при прикосновении

Кнопка не является UIButton, это подкласс UIControl

Когда пользователь нажимает на мой UIControl, я хочу изменить альфу, чтобы у пользователя была визуальная обратная связь о том, что он нажат. Затем измените его снова, когда он будет выпущен

UIImageView *mask =[[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 58, 58)];
mask.image =[UIImage imageNamed:@"centerButton.png"];
mask.center = self.center;
mask.center = CGPointMake(mask.center.x, mask.center.y+3);
[self addSubview:mask];

Центральная кнопка была создана с использованием учебника на rayWenderlich.com для изучения создания пользовательских элементов управления.

Я застрял. Я не могу понять, как сделать ссылку на центральное изображение.

Вот мой класс .h

@interface OOTRotaryWheel : UIControl


@property (weak) id <OOTRotaryProtocol> delegate;
@property (nonatomic, strong) UIView *container;
@property int numberOfSections;
@property CGAffineTransform startTransform;
@property (nonatomic, strong) NSMutableArray *sectors;
@property int currentSector;
@property (nonatomic, retain) UIImageView *mask;

- (id) initWithFrame:(CGRect)frame andDelegate:(id)del withSections:(int)sectionsNumber;
- (void)rotate;
- (void) buildSectorsEven;
- (void) buildSectorsOdd;

@end

Итак, как мне обнаружить касание UIImageView и подправить? и сделать его больше похожим на кнопку (так что, когда я могу загрузить другой xib или что-то в этом роде)


person Cocoa Dev    schedule 01.10.2012    source источник


Ответы (1)


Чтобы изменить альфа-версию, используйте: mask.alpha = 0.0f;

Чтобы сделать это с помощью IBActions:
Чтобы действовать при нажатии кнопки:

-(IBAction)buttonPressedDown{
      mask.alpha = 0.5f;
}//Connect this IBAction to touchDown

Чтобы изменить кнопку обратно на исходную альфу:

-(IBAction)buttonUpInsideAndOutside{
      mask.alpha = 1.0f;
}//Connect this IBAction to touchUpInside and touchUpOutside

Чтобы сделать это с помощью UITouches:
Чтобы действовать при нажатии кнопки:

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
      UITouch*touch = [touches anyObject];
      if(touch.view==mask)
            mask.alpha = 0.5f;
}//Will only work if the IBOutlet is connected

Чтобы изменить кнопку обратно на исходную альфу:

-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{
      mask.alpha = 1.0f;
}//Will only work if the IBOutlet is connected

Это будет работать независимо от того, есть ли у вас интерфейс xib/раскадровки или нет.

person Comradsky    schedule 01.10.2012
comment
Я думаю, вы имеете в виду touchUpInside вместо buttonUpInside. - person pasawaya; 02.10.2012
comment
Да, но Xib пуст. Элементы управления создаются в коде. (Пожалуйста, посмотрите сайт, потому что я следил за учебником). Я сделал Маску переменной в свойстве - person Cocoa Dev; 02.10.2012
comment
Если переменная маски не является глобальной, сделайте ее глобальной, потому что это будет наиболее эффективным способом. В противном случае вы бы использовали этот классный расширенный цикл for, но он не так эффективен, попробуйте метод UITouches, он должен работать, и если это не так, я покажу вам 2 других варианта. - person Comradsky; 02.10.2012