Есть ли способ, чтобы кнопка Round Rect могла получить точно такой же размер изображения? - PullRequest
2 голосов
/ 18 февраля 2012

Есть ли способ, чтобы кнопка Round Rect имела точно такой же размер изображения? Есть ли круглые кнопки? У меня есть проект со многими кнопками-изображениями, и они смешиваются вместе. Изображения в основном круглые, а кнопки прямоугольные, поэтому, когда я размещаю их близко друг к другу, они смешиваются.

Ответы [ 2 ]

8 голосов
/ 18 февраля 2012

Когда iPhone обнаруживает касание на экране, он находит сенсорный вид с помощью «проверки нажатия». По умолчанию тестирование попаданий предполагает, что каждое представление является прямоугольником.

Если вы хотите, чтобы тестирование попаданий рассматривало ваш вид как другую форму, вам нужно создать подкласс (в вашем случае UIButton) и переопределить метод pointInside:withEvent:, чтобы проверить форму, которую вы хотите использовать.

Например:

@implementation MyOvalButton

- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event {
    UIBezierPath *path = [UIBezierPath bezierPathWithOvalInRect:self.bounds];
    return [path containsPoint:point];
}

Я не проверял этот код.

Swift версия:

class MyOvalButton: UIButton {

    override func point(inside point: CGPoint, with event: UIEvent?) -> Bool {
        return UIBezierPath(ovalIn: bounds).contains(point)
    }

Не забудьте установить пользовательский класс вашей кнопки на MyOvalButton в вашей раскадровке или в XIB, если вы создаете кнопку.

Вот демонстрация, в которой я соединил события касания и касания кнопки, чтобы сделать серый фон при касании кнопки:

demo

1 голос
/ 18 февраля 2012

Отвечая на ваш вопрос в теме: (надеюсь, я понял, что вы действительно хотите)

[button setFrame:CGRectMake(button.frame.origin.x, button.frame.origin.y, image.size.width, image.size.height)];

Это делает рамку кнопки такой же, как размер вашего изображения.

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