it-swarm.com.ru

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

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

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

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

13
Mats

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

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

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

4
Aaron Rasmussen

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

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

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

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

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

1
Chris

Swift допускает синтаксис, который Objective-C не делает:

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

В target-C вы должны сделать это по-другому:

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