Использование переменных в CGRectMake, Swift, UIkit
Для приложения, которое я делаю, мне нужно использовать переменные, чтобы изменить размер и положение объектов (ярлыки). Я пробовал var example = CGRectMake(0, 0, 0, 100)
, надеясь, что он проигнорирует нули (не думая, что будет). Затем я попытался:
var example = 100
Label1.frame = CGRectMake(20, 20, 50, example)
Я немного изменил синтаксис, добавив "" и заменив CGRectMake
на CGRect
и т.д., но ничего не получилось... Я не понимаю, что я делаю неправильно здесь... Help!
Ответы
Ответ 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;