Как отключить действие TouchUpInside за пределами кнопки

Это мой ксиб. Я просто перетащил UIButton и изменил цвет фона.

введите здесь описание изображения

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

    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

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

введите здесь описание изображения

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

Как я могу этого добиться? Спасибо.


person Umair Afzal    schedule 06.06.2016    source источник
comment
подход Санмана будет работать. вы также можете попробовать использовать hitTest:   -  person Stephenye    schedule 06.06.2016


Ответы (1)


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

- (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
  }
} 

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

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

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

person Sanman    schedule 06.06.2016