Подтвердить что ты не робот

Использование переменных в CGRectMake, Swift, UIkit

Для приложения, которое я делаю, мне нужно использовать переменные, чтобы изменить размер и положение объектов (ярлыки). Я пробовал var example = CGRectMake(0, 0, 0, 100), надеясь, что он проигнорирует нули (не думая, что будет). Затем я попытался:

var example = 100
Label1.frame = CGRectMake(20, 20, 50, example)

Я немного изменил синтаксис, добавив "" и заменив CGRectMake на CGRect и т.д., но ничего не получилось... Я не понимаю, что я делаю неправильно здесь... Help!

4b9b3361

Ответ 1

CGRectMake принимает CGFloat для всех своих аргументов. Ваш пример кода должен работать нормально, если вы указываете, что example должен быть CGFloat, используя идентификатор типа:

         //  v~~~~ add this...
var example: CGFloat = 100
Label1.frame = CGRectMake(20, 20, 50, example)

В противном случае swift отображает тип example как Int, а вызов CGRectMake завершается с ошибкой, потому что он не может принимать Int в качестве параметра...

Ответ 2

Обновление Swift 3

let rect = CGRect(x: 0, y: 0, width: 100, height: 100)

Ответ 3

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

let myLabel = UILabel()

override func viewDidLoad() {
    super.viewDidLoad()

    let tapGestRecog = UITapGestureRecognizer(target: self, action: "handleTap:")
    self.view.addGestureRecognizer(tapGestRecog)
}

func handleTap(sender:UIGestureRecognizer) {

    let newXposition = sender.locationInView(self.view).x
    let newYposition = sender.locationInView(self.view).y

    myLabel.frame = CGRectMake(newXposition, newYposition, 200, 200)
}

Это просто пример и очень грубый способ сделать это. Есть много других способов сделать это, но, надеюсь, дает вам представление о том, как его достичь.

Ответ 4

Swift позволяет синтаксис, который Objective-C не выполняет:

var example = 100
label.frame.size.height = example

В Objective-C вам придется делать это по-другому:

CGRect frame = label.frame;  //Create a temporary rect to hold the frame value
frame.size.height = example;
label.frame = frame;