Как я могу сделать unclipped subview получать сенсорные события? - PullRequest
0 голосов
/ 12 марта 2011

У меня есть небольшой пользовательский вид, который я использую в качестве кнопки. Я делаю это с помощью простого UIButtonTypeCustom, который я включаю в качестве подпредставления за пределы представления. Однако, так как вид небольшой, я хочу увеличить размер пораженной цели. Это легко сделать (можно подумать), установив рамку моей кнопки больше, чем границы пользовательского представления, и установив clipsToBounds в NO. Это работает для визуала (пользовательская кнопка рисует вне родительского представления), но она не получает touchUpInside событий в области за пределами родительского представления. Как заставить кнопку получать touchUpInside события?

- (id) initWithFrame: (CGRect) frame {
  if (self = [super initWithFrame: frame]) {
    self.backgroundColor = [UIColor clearColor];
    self.clipsToBounds = NO;

    // ... various image views and labels ...

    UIButton *touchArea = [UIButton buttonWithType: UIButtonTypeCustom];
    touchArea.backgroundColor = [UIColor colorWithRed: 1 green: 0 blue: 0 alpha: .3]; // so I can see the bounds
    CGRect touchAreaFrame = self.bounds;
    CGFloat checkboxHitTargetExtension = 7;
    touchAreaFrame.origin.y -= checkboxHitTargetExtension;
    touchAreaFrame.size.height += (checkboxHitTargetExtension * 2);
    touchArea.frame = touchAreaFrame;
    [self addSubview: touchArea];

    // ... add listeners etc ...
  }
  return self;
}

Ответы [ 2 ]

2 голосов
/ 12 марта 2011

Вы можете использовать pointInside: withEvent: чтобы определить, находится ли конкретная точка «внутри» представления.См. Ссылку на UIView для получения дополнительной информации.

http://developer.apple.com/library/ios/#documentation/uikit/reference/UIView_Class/UIView/UIView.html

Также проверьте CGRectOffset, это очень удобно для увеличения CGRect.

0 голосов
/ 12 марта 2011

Сделайте кнопку не дочерней по отношению к представлению, а родным по отношению к представлению, и расположите ее сверху, и тогда не будет никаких проблем с отсечением при прикосновении к кнопке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...