【问题标题】:How do I dismiss the blureffect after the user pressed a alternativ in alertview?用户在警报视图中按下替代后如何消除模糊效果?
【发布时间】:2017-02-07 18:37:00
【问题描述】:

这是模糊效果和用户想要返回时显示的警报。我找不到任何我理解的东西,所以我希望这里有人可以帮助我。感谢您的建议!

这是所有的代码,除了新的代码。

       //
//  Visartotal.swift
//  Segment controll
//
//  Created by Simon Harrysson on 2017-01-28.
//  Copyright © 2017 Simon Harrysson. All rights reserved.
//

import UIKit

var Allabetygtillsamans: Double = 0


class Visartotal: UIViewController
{

    @IBOutlet weak var Tillbaka: UIButton!
    @IBOutlet weak var Börjaomknapp: UIButton!
    @IBOutlet weak var Visartotalreligion: UILabel!
    @IBOutlet weak var VisartotalIMusik: UILabel!
    @IBOutlet weak var Visartotaltmerit: UILabel!
    @IBOutlet weak var VisartotalBild: UILabel!
    @IBOutlet weak var Visartotalmatematik:UILabel!
    @IBOutlet weak var VisartotalEngelska: UILabel!

    var blurEffectView: UIVisualEffectView?

    override func viewDidAppear(_ animated: Bool)
    {
        self.blurEffect = UIBlurEffect(style: .dark)
        self.blurEffectView = UIVisualEffectView(effect: self.blurEffect)
         blurEffectView?.frame = view.bounds
        blurEffectView?.autoresizingMask = [.flexibleWidth, .flexibleHeight] // for supporting device rotation


    }
    var blurEffect: UIBlurEffect?

       @IBAction func TillbakaAction(_ sender: UIButton)
    {
         createAlert(title: "Är du säker på att du vill börja om?", message: "Ifyllda betyg nollställs")
    blurEffectView = UIVisualEffectView(effect: blurEffect)

               view.addSubview(blurEffectView!)
        }

    func createAlert (title:String, message:String)
    {
        let alert = UIAlertController(title: title, message: message, preferredStyle: UIAlertControllerStyle.alert)

        //CREATING ON BUTTON
        alert.addAction(UIAlertAction(title: "Ja", style: UIAlertActionStyle.default, handler: {
            (action) in
            alert.dismiss(animated: true, completion: nil)
            print ("Jag vill gå tillbaka")
            self.performSegue(withIdentifier: "Tillbaka", sender: nil)
            self.blurEffectView?.removeFromSuperview()

                    }))

        alert.addAction(UIAlertAction(title: "Nej", style: UIAlertActionStyle.default, handler: { (action) in
            alert.dismiss(animated: true, completion: nil)
            print("Nej, jag vill inte gå tillbaka")
            self.blurEffectView?.removeFromSuperview()

        }))

        self.present(alert, animated: true, completion: nil)



    }

    override func viewDidLoad()
    {


        let Allabetygtillsamans = MusikbetygIDouble + BildbetygValtDouble + MatematikbetygvaltIDouble + ReligionbetygvaltDouble + EngelskabetygvaltDouble

        Visartotaltmerit.font = UIFont(name: "Arial", size: 21)


        let totalameritet = String(Allabetygtillsamans)


        VisartotalIMusik.text = MusikbetygValt
        VisartotalBild.text = BildbetygValt
        Visartotalmatematik.text = Matematikbetygvalt
        Visartotalreligion.text = Religionbetygvalt
        VisartotalEngelska.text = Engelskabetygvalt

        Visartotaltmerit.text = totalameritet + ("p")


        if BildbetygValt == "F"
        {
            VisartotalBild.textColor = UIColor.red
        }
        if MusikbetygValt == "F"
        {
            VisartotalIMusik.textColor = UIColor.red
        }
        if Matematikbetygvalt == "F"
        {
            Visartotalmatematik.textColor = UIColor.red
        }
        if Religionbetygvalt == "F"
        {
            Visartotalreligion.textColor = UIColor.red
        }
        if Engelskabetygvalt == "F"
        {
            VisartotalEngelska.textColor = UIColor.red
        }



        switch Allabetygtillsamans {
        case 290...340:
            Visartotaltmerit.textColor = UIColor.green
            Visartotaltmerit.backgroundColor = UIColor.clear
            Visartotaltmerit.backgroundColor = UIColor.clear
        case 230...290:
            Visartotaltmerit.textColor = UIColor.yellow
            Visartotaltmerit.backgroundColor = UIColor.clear
            Visartotaltmerit.backgroundColor = UIColor.clear
        case 220...230:
            Visartotaltmerit.textColor = UIColor.orange
            Visartotaltmerit.backgroundColor = UIColor.clear
        case 0...220:
            Visartotaltmerit.textColor = UIColor.red
            Visartotaltmerit.backgroundColor = UIColor.clear
        default:
            print("defult")
        }



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





}
}

【问题讨论】:

  • 仅供参考 - 不要在警报操作中调用 alert.dismiss(...。系统将为您解除警报。

标签: swift popup alert uiblureffect


【解决方案1】:

您需要创建一个blurEffectView 变量,您可以从tillbakaAction 函数的范围之外访问它——在viewController 中的某个位置。然后,在您的 UIAlertActions 中,您可以说 self.blurEffectView.removeFromSuperview() 将其删除。不会有动画 - 它会消失。

另外,正如另一位评论者所说,您不需要说 alert.dismiss...,因为这会自动发生。

作为变量的示例,这将起作用:

var blurEffectView: UIVisualEffectView?

@IBAction func tillbakaAction(_ sender: UIButton) {
    ...
    self.blurEffectView = UIVisualEffectView(effect: blurEffect)
    ...
}

在你的行动中:

alert.addAction(UIAlertAction(title: "Ja", style: UIAlertActionStyle.default, handler: {
    (action) in
    self.blurEffectView?.removeFromSuperview()
    ...

【讨论】:

  • 我找不到创建该变量的地方。我应该在哪里创建它,以便它可以用于tillbakaAction
  • @theswed 你可以把它作为一个全局变量放在你的viewController中。我会编辑以提供帮助。
  • 你愿意帮助我的代码吗?提前致谢
  • @theswed 您需要将它们放在类声明中。例如,将它们放在您的 @IBOutlets 下方。
  • @creepersspeak 但随后出现此错误:无法在属性初始化程序中使用实例成员“blurEffect”;属性初始化程序在“self”可用之前运行
猜你喜欢
  • 2017-06-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-17
  • 1970-01-01
  • 2019-09-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多