2016-06-06 4 views
1

Это мой Xib. Я просто потащил UIButton и изменил его цвет фона.Как отключить TouchUpInside Действие за пределами границы кнопки

enter image description here

Я создал полукруг слой, используя этот код

let circlePath = UIBezierPath.init(arcCenter: CGPointMake(mybutton.bounds.size.width/4, 0), radius: mybutton.bounds.size.height, startAngle: 0.0, endAngle: CGFloat(M_PI), clockwise: true) 
    let circleShape = CAShapeLayer() 
    circleShape.path = circlePath.CGPath 
    mybutton.layer.mask = circleShape 

и это мой выход.

enter image description here

Его совершенна, как я хочу. Но проблема в том, что эта кнопка доступна за пределами ее закругленной области (в зависимости от формы нажатия кнопки). Я хочу, чтобы он был доступен только для округлых фигур.

Как я могу это достичь? Благодарю.

+0

подход санмана будет работать. вы также можете использовать hitTest: – Stephenye

ответ

5

Создать действие подписи

- (IBAction)buttonPressed:(id)sender forEvent:(UIEvent*)event{ 
//your code 
} 

для кнопки

Узнайте сенсорное местоположение с помощью этого ответа UIButton TouchUpInside Touch Location

Проверьте, что местоположение содержатся в вашем CGPath с помощью

- (IBAction)buttonPressed:(id)sender forEvent:(UIEvent*)event{ 
    //find location point using above answer link 
    if([button.layer.mask containsPoint: location]) 
    { 
    //proceed with the code 
    } 
    else 
    return; 
} 

он возвращает bool, если он содержит точку.

i.e если он содержит точку, вы можете продолжить, иначе вы можете вернуться.

Надеюсь, что это поможет :)