Да.Вы можете переопределить метод hitTest:withEvent:
, чтобы вернуть представление для большего набора точек, чем это представление содержит.См. Справочник классов UIView .
Редактировать: Пример:
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
{
CGFloat radius = 100.0;
CGRect frame = CGRectMake(-radius, -radius,
self.frame.size.width + radius,
self.frame.size.height + radius);
if (CGRectContainsPoint(frame, point)) {
return self;
}
return nil;
}
Редактировать 2: (После уточнения:) Чтобы гарантировать, что кнопка рассматривается как находящаяся в пределах границ родителя, необходимо переопределить pointInside:withEvent:
в родительском элементе, чтобы включить рамку кнопки.
- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event
{
if (CGRectContainsPoint(self.view.bounds, point) ||
CGRectContainsPoint(button.view.frame, point))
{
return YES;
}
return NO;
}
Примечание код только для переопределения pointInside не совсем корректен.Как объясняет Summon ниже, сделайте следующее:
-(BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event
{
if ( CGRectContainsPoint(self.oversizeButton.frame, point) )
return YES;
return [super pointInside:point withEvent:event];
}
Обратите внимание, что вы, скорее всего, сделаете это с self.oversizeButton
в качестве IBOutlet в этом подклассе UIView;затем вы можете просто перетащить «кнопку увеличения» в специальном представлении.(Или, если по какой-то причине вы много занимались этим в проекте, у вас был бы специальный подкласс UIButton, и вы могли бы просмотреть список подпредставлений для этих классов.) Надеюсь, это поможет.