Glanz-Effekt für Custom-Button Klick

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Du könntest auch UIButton subclassen und in touchesBegan: touchesEnded: die Funktionalität geben. Außerdem müsste es auch UIControl Events wie UIControlEventTouchDown geben, oder nicht (UIControlEventTouchUpInside und UIControlEventTouchUpOutside sollten denke ich gehen) ?
  • da_eh schrieb:

    Du könntest auch UIButton subclassen und in touchesBegan: touchesEnded: die Funktionalität geben. Außerdem müsste es auch UIControl Events wie UIControlEventTouchDown geben, oder nicht (UIControlEventTouchUpInside und UIControlEventTouchUpOutside sollten denke ich gehen) ?


    Wie gesagt, ich hab ne Subclass. aber wenn ich touchesBegan usw. verwende, wird der eigentliche Selector fürs TochEvent nicht mehr aufgerufen...

    folgender Code klappt leider auch nicht:

    Quellcode

    1. ​- (id)initWithTitle:(NSString *)btnTitle color:(UIColor *)btnColor fillColor:(UIColor *)btnFillColor titleColor:(UIColor *)btnTitleColor frame:(CGRect)btnFrame
    2. {
    3. self = [self initWithFrame:btnFrame];
    4. if (self) {
    5. self->color = btnColor;
    6. self->fillColor = btnFillColor;
    7. self->titleColor = btnTitleColor;
    8. [self setTitle:btnTitle forState:UIControlStateNormal];
    9. [self setTitleColor:self->titleColor forState:UIControlStateNormal];
    10. [self addTarget:self action:@selector(flashGlow) forControlEvents:UIControlEventTouchDown];
    11. }
    12. return self;
    13. }
    14. // Only override drawRect: if you perform custom drawing.
    15. // An empty implementation adversely affects performance during animation.
    16. - (void)drawRect:(CGRect)rect
    17. {
    18. // Drawing code
    19. self.layer.cornerRadius = self.frame.size.height / 2;
    20. self.layer.borderColor = self->color.CGColor;
    21. self.layer.borderWidth = 1.0;
    22. self.layer.backgroundColor = self->fillColor.CGColor;
    23. }
    24. - (void)flashGlow
    25. {
    26. if (!flashing) {
    27. flashing = YES;
    28. flashLayer = [CALayer layer];
    29. UIColor *glowColor = self->titleColor;
    30. flashLayer.shadowColor = [glowColor CGColor];
    31. flashLayer.shadowRadius = 4.0f;
    32. flashLayer.shadowOpacity = .9;
    33. flashLayer.shadowOffset = CGSizeZero;
    34. flashLayer.masksToBounds = NO;
    35. [self.layer addSublayer:flashLayer];
    36. [NSTimer scheduledTimerWithTimeInterval:0.1
    37. target:self
    38. selector:@selector(flashGlow)
    39. userInfo:nil
    40. repeats:NO];
    41. }
    42. else {
    43. flashing = NO;
    44. [flashLayer removeFromSuperlayer];
    45. }
    46. }
    Alles anzeigen
    Man kann alles schaffen. Man muss es nur wollen ;)
    www.regetskcob.github.io
  • DanielBocksteger95 schrieb:

    da_eh schrieb:

    Du könntest auch UIButton subclassen und in touchesBegan: touchesEnded: die Funktionalität geben. Außerdem müsste es auch UIControl Events wie UIControlEventTouchDown geben, oder nicht (UIControlEventTouchUpInside und UIControlEventTouchUpOutside sollten denke ich gehen) ?


    Wie gesagt, ich hab ne Subclass. aber wenn ich touchesBegan usw. verwende, wird der eigentliche Selector fürs TochEvent nicht mehr aufgerufen...

    folgender Code klappt leider auch nicht:

    Quellcode

    1. ​- (id)initWithTitle:(NSString *)btnTitle color:(UIColor *)btnColor fillColor:(UIColor *)btnFillColor titleColor:(UIColor *)btnTitleColor frame:(CGRect)btnFrame
    2. {
    3. self = [self initWithFrame:btnFrame];
    4. if (self) {
    5. self->color = btnColor;
    6. self->fillColor = btnFillColor;
    7. self->titleColor = btnTitleColor;
    8. [self setTitle:btnTitle forState:UIControlStateNormal];
    9. [self setTitleColor:self->titleColor forState:UIControlStateNormal];
    10. [self addTarget:self action:@selector(flashGlow) forControlEvents:UIControlEventTouchDown];
    11. }
    12. return self;
    13. }
    14. // Only override drawRect: if you perform custom drawing.
    15. // An empty implementation adversely affects performance during animation.
    16. - (void)drawRect:(CGRect)rect
    17. {
    18. // Drawing code
    19. self.layer.cornerRadius = self.frame.size.height / 2;
    20. self.layer.borderColor = self->color.CGColor;
    21. self.layer.borderWidth = 1.0;
    22. self.layer.backgroundColor = self->fillColor.CGColor;
    23. }
    24. - (void)flashGlow
    25. {
    26. if (!flashing) {
    27. flashing = YES;
    28. flashLayer = [CALayer layer];
    29. UIColor *glowColor = self->titleColor;
    30. flashLayer.shadowColor = [glowColor CGColor];
    31. flashLayer.shadowRadius = 4.0f;
    32. flashLayer.shadowOpacity = .9;
    33. flashLayer.shadowOffset = CGSizeZero;
    34. flashLayer.masksToBounds = NO;
    35. [self.layer addSublayer:flashLayer];
    36. [NSTimer scheduledTimerWithTimeInterval:0.1
    37. target:self
    38. selector:@selector(flashGlow)
    39. userInfo:nil
    40. repeats:NO];
    41. }
    42. else {
    43. flashing = NO;
    44. [flashLayer removeFromSuperlayer];
    45. }
    46. }
    Alles anzeigen


    Das hier läuft nun aber:

    Quellcode

    1. ​- (void)flashGlow
    2. {
    3. if (!flashing) {
    4. flashing = YES;
    5. flashLayer = self.layer;
    6. UIColor *glowColor = self->titleColor;
    7. self.layer.shadowColor = [glowColor CGColor];
    8. self.layer.shadowRadius = 4.0f;
    9. self.layer.shadowOpacity = .9;
    10. self.layer.shadowOffset = CGSizeZero;
    11. self.layer.masksToBounds = NO;
    12. [NSTimer scheduledTimerWithTimeInterval:0.1
    13. target:self
    14. selector:@selector(flashGlow)
    15. userInfo:nil
    16. repeats:NO];
    17. }
    18. else {
    19. flashing = NO;
    20. self.layer.shadowColor = flashLayer.shadowColor;
    21. self.layer.shadowOffset = flashLayer.shadowOffset;
    22. self.layer.shadowRadius = flashLayer.shadowRadius;
    23. self.layer.shadowOpacity = flashLayer.shadowOpacity;
    24. self.layer.masksToBounds = flashLayer.masksToBounds;
    25. }
    26. }
    Alles anzeigen
    Man kann alles schaffen. Man muss es nur wollen ;)
    www.regetskcob.github.io