2016-08-28 5 views
1

Этот код имеет кнопку, которая при нажатии синего квадрата над кнопкой становится меньше. Но при повторном нажатии кнопки квадрат не возвращается к исходному размеру. Это связано с тем, что кнопки func имеют только одну команду. Как я могу заставить кнопку переключаться между первоначальным размером и меньшим размером, только нажав одну кнопку. Это быстрый код.Как изменить до и после ограничений при нажатии кнопки (быстрый код)?

// 
// ViewController.swift 
// ssfsfd 
// 
// Created by John Zalubski on 8/28/16. 
// Copyright © 2016 John Zalubski. All rights reserved. 
// 

import UIKit 

class ViewController: UIViewController { 

    let colorview = UIView() 
    var initialc = [NSLayoutConstraint]() 
    override func viewDidLoad() { 
     super.viewDidLoad() 
     colorview.translatesAutoresizingMaskIntoConstraints = false 
     colorview.backgroundColor = UIColor.blueColor() 
     self.view.addSubview((colorview)) 

     let leadingc = colorview.leadingAnchor.constraintEqualToAnchor(self.view.leadingAnchor) 
     let trailingC = colorview.trailingAnchor.constraintEqualToAnchor(self.view.trailingAnchor) 
     let topc = colorview.topAnchor.constraintEqualToAnchor(self.view.topAnchor) 
     let bottomc = colorview.bottomAnchor.constraintEqualToAnchor(self.view.bottomAnchor, constant: -50) 

     initialc.appendContentsOf([leadingc,trailingC,topc,bottomc]) 
     NSLayoutConstraint.activateConstraints(initialc) 


    } 
    @IBAction func changethebleep(sender: AnyObject) { 

     NSLayoutConstraint.deactivateConstraints(initialc) 

     let widthc = colorview.widthAnchor.constraintEqualToConstant(100) 
     let heightc = colorview.heightAnchor.constraintEqualToConstant(100) 
     let centerxc = colorview.centerXAnchor.constraintEqualToAnchor(self.view.centerXAnchor) 
     let centeryc = colorview.centerYAnchor.constraintEqualToAnchor(self.view.centerYAnchor) 

     NSLayoutConstraint.activateConstraints([widthc,heightc,centerxc,centeryc]) 

    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 


} 
+0

Если вы обнаружите, что ответ решает вашу проблему, пожалуйста, примите его, нажав на галочку слева от ответа. Пойдите, сделайте это для всех вопросов, которые вы задали до сих пор. – vacawama

ответ

0

Вот один из способов сделать это. Поместите все ограничения в массив с именем allc. Только половина ограничений будет активна в любое время.

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

class ViewController: UIViewController { 

    let colorview = UIView() 
    var allc = [NSLayoutConstraint]() 
    override func viewDidLoad() { 
     super.viewDidLoad() 
     colorview.translatesAutoresizingMaskIntoConstraints = false 
     colorview.backgroundColor = UIColor.blueColor() 
     self.view.addSubview((colorview)) 

     let leadingc = colorview.leadingAnchor.constraintEqualToAnchor(self.view.leadingAnchor) 
     let trailingC = colorview.trailingAnchor.constraintEqualToAnchor(self.view.trailingAnchor) 
     let topc = colorview.topAnchor.constraintEqualToAnchor(self.view.topAnchor) 
     let bottomc = colorview.bottomAnchor.constraintEqualToAnchor(self.view.bottomAnchor, constant: -50) 

     NSLayoutConstraint.activateConstraints([leadingc, trailingC, topc, bottomc]) 

     let widthc = colorview.widthAnchor.constraintEqualToConstant(100) 
     let heightc = colorview.heightAnchor.constraintEqualToConstant(100) 
     let centerxc = colorview.centerXAnchor.constraintEqualToAnchor(self.view.centerXAnchor) 
     let centeryc = colorview.centerYAnchor.constraintEqualToAnchor(self.view.centerYAnchor) 

     allc = [leadingc, trailingC, topc, bottomc, widthc, heightc, centerxc, centeryc] 
    } 

    @IBAction func changethebleep(sender: AnyObject) { 

     var newactive = [NSLayoutConstraint]() 

     for constraint in allc { 
      if constraint.active { 
       constraint.active = false 
      } else { 
       newactive.append(constraint) 
      } 
     } 

     NSLayoutConstraint.activateConstraints(newactive) 
    } 
} 

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