相关疑难解决方法(0)

我在哪里将常用实用程序功能放在iOS 8 + Swift中

我有以下方法(例如),我希望能够在iOS + Swift项目中的任何ViewController中使用它:

func initializeBlurEffectOnGivenUIView(UIViewToBeBlurred: UIView) {

    let UIViewToBeBlurredHeight = UIViewToBeBlurred.frame.size.height
    let UIViewToBeBlurredWidth = UIViewToBeBlurred.frame.size.width
    let UIViewToBeBlurredX = UIViewToBeBlurred.frame.origin.x
    let UIViewToBeBlurredY = UIViewToBeBlurred.frame.origin.y

    let blurEffect:UIBlurEffect = UIBlurEffect(style: UIBlurEffectStyle.Light)
    let vibrancyEffect = UIVibrancyEffect(forBlurEffect: blurEffect)

    let vibrancyEffectView = UIVisualEffectView(effect: vibrancyEffect)
    let blurEffectView:UIVisualEffectView = UIVisualEffectView(effect: blurEffect)
    blurEffectView.frame = CGRectMake(UIViewToBeBlurredX, UIViewToBeBlurredY, UIViewToBeBlurredWidth, UIViewToBeBlurredHeight)
    blurEffectView.contentView.addSubview(vibrancyEffectView)

    UIViewToBeBlurred.addSubview(blurEffectView)
}
Run Code Online (Sandbox Code Playgroud)

我有更常见的助手,比如那里我也想提供.如何构建应用程序来实现此目的?

ios swift xcode6 ios8

6
推荐指数
2
解决办法
5042
查看次数

ios-charts设置数据后如何无效/重绘

请参阅底部更新(4/30/2015)

我正在使用ios-charts在Swift for iOS中实现一个饼图,并选择自定义图例.值得注意的是,图表显示在UICollectionView的单元格中.问题是,在第一次显示时,不显示自定义图例内容.相反,我获得了从数据生成的图例内容.

如果我在屏幕外滚动视图,然后将其滚动回屏幕,则会显示正确的自定义图例.所以,我猜我需要在设置自定义图例后强制重绘/重新布局/重新设置.我还没弄明白怎么做. 有没有人有想法?我完全错过了什么吗?谢谢!

初始显示图表 - 数据生成(错误)图例 初始显示图表 - 生成的图例

滚动并返回到屏幕后的图表 - (正确的图例) 带有适当图例的图表

这是我绘制此图表的代码:

func initChart(pieChart: PieChartView) {
    numFormatter.maximumFractionDigits = 0

    pieChart.backgroundColor = UIColor.whiteColor()

    pieChart.usePercentValuesEnabled = false
    pieChart.drawHoleEnabled = true
    pieChart.holeTransparent = true
    pieChart.descriptionText = ""
    pieChart.centerText = "30%\nComplete"

    pieChart.data = getMyData()

    // Setting custom legend info, called AFTER setting data
    pieChart.legend.position = ChartLegend.ChartLegendPosition.LeftOfChartCenter
    pieChart.legend.colors = [clrGreenDk, clrGold, clrBlue]
    pieChart.legend.labels = ["Complete","Enrolled","Future"]
    pieChart.legend.enabled = true
}

func getMyData() -> ChartData {

    var xVals = ["Q201","R202","S203","T204","U205", "V206"]

    var courses: [ChartDataEntry] = …
Run Code Online (Sandbox Code Playgroud)

mpandroidchart ios-charts

6
推荐指数
1
解决办法
6654
查看次数

如何使用Cocoa(Mac)在Swift中创建PDF

Xcode 7.3.2,Swift 2,Cocoa(Mac).

我的应用程序涉及用户输入一些文本,可以导出为PDF.

在我的应用程序的iOS版本中,我可以使用CoreText框架相对轻松地创建PDF :

let html = "<font face=\'Futura\' color=\"SlateGray\"><h2>\(title)</h2></font><font face=\"Avenir\" color=\"SlateGray\"><h4>\(string)</h4></font>"

    let fmt = UIMarkupTextPrintFormatter(markupText: html)

    // 2. Assign print formatter to UIPrintPageRenderer

    let render = UIPrintPageRenderer()
    render.addPrintFormatter(fmt, startingAtPageAt: 0)

    // 3. Assign paperRect and printableRect

    let page = CGRect(x: 10, y: 10, width: 595.2, height: 841.8) // A4, 72 dpi, margin of 10 from top and left.
    let printable = page.insetBy(dx: 0, dy: 0)

    render.setValue(NSValue(cgRect: page), forKey: "paperRect")
    render.setValue(NSValue(cgRect: printable), forKey: "printableRect")

    // 4. …
Run Code Online (Sandbox Code Playgroud)

pdf macos cocoa swift

6
推荐指数
1
解决办法
3107
查看次数

对至少未渲染过一次的视图 (_UIReplicantView) 进行快照需要 afterScreenUpdates:YES

我是一个仍在学习的新程序员,所以如果我的代码看起来像废话,请原谅我。我正在编写一个程序,它有一个名为“infoViewController”的 ViewController,上面有多个 UITextFields。用户应该填写文本字段,然后单击屏幕右上角的“下一步”按钮,然后激活“显示”转场并将它们带到下一个 VC。来自文本字段的所有信息都存储在常量中,以便以后我获取他们输入的信息并将其放在最后生成的 .PDF 文件中。我希望用户能够轻松浏览文本字段,因此我将其设置为用户在 TextField 上并单击键盘上的“下一步”时的位置,它将它们移动到下一个 TextField,以便他们可以快速轻松地将它们全部填满。我遇到的问题是,由于某种原因,当我单击键盘上的“下一步”时,我不断收到此错误:

[快照] 对至少未渲染过一次的视图 (0x7f8995578​​6c0, _UIReplicantView) 进行快照需要 afterScreenUpdates:YES。

该应用程序仍然有效......但我宁愿没有在面板中(在Xcode中)显示错误,哈哈。此外,当它执行此操作时,它就像屏幕在移动到下一个 TextField 之前会出现故障并闪烁白色一瞬间(超快)......有任何解决方案吗?

请将您回复的任何内容都降低到初学者级别。谢谢!

这是我为在 TextField 之间切换而编写的代码:

扩展信息视图控制器 {

func textFieldShouldReturn(_ textField: UITextField) -> Bool {
    let nextTag = textField.tag + 1

    if let nextResponder = textField.superview?.viewWithTag(nextTag) {
        nextResponder.becomeFirstResponder()
    } else {
        textField.resignFirstResponder()
    }

    return true
}
Run Code Online (Sandbox Code Playgroud)

}

我在“viewDidLoad”中分配了 TextField 委托。(例如:clientTextField.delegate = self)

我还在“viewDidLoad”中分配了标签。(例如:clientTextField.tag = 0)

xcode textfield uitextfield ios swift

6
推荐指数
2
解决办法
4746
查看次数

在Swift中调度闭包表达式

我希望能够安排在未来的绝对或相对时间运行闭包.我看到我可以NSTimer用来安排稍后调用的选择器,但这不是我想要的.我更愿意看到这样的事情:

let timer = NSTimer.scheduleWithTimeInterval(
    ti: NSTimerInterval(1.0),
    action: {
        // do something
    }
)
Run Code Online (Sandbox Code Playgroud)

在Swift中有没有内置的方法来做这样的事情?

编辑

我现在遇到的dispatch_after似乎更符合我的想法,但我对其他想法持开放态度.

closures nstimer swift

5
推荐指数
1
解决办法
2464
查看次数

更改了 rootViewController 但旧的 rootViewController 的视图仍在视图层次结构中

我有一个基本情况,当用户通过身份验证时,我删除当前屏幕(登录屏幕)并将其更改为应用程序内的另一个屏幕。

为此,我使用以下代码:

if let appDelegate = UIApplication.shared.delegate as? AppDelegate {
    print("Window's subviews before removed = \(appDelegate.window?.subviews)")

    appDelegate.window?.subviews.forEach { $0.removeFromSuperview() }

    print("Window's subviews after removed = \(appDelegate.window?.subviews)")

    appDelegate.window?.rootViewController?.view?.removeFromSuperview()
    appDelegate.window?.rootViewController?.removeFromParentViewController()

    appDelegate.window?.rootViewController = newRootViewController

    print("Window's subviews after changed = \(appDelegate.window?.subviews)")
}
Run Code Online (Sandbox Code Playgroud)

这是输出:

在此处输入图片说明

这是用户可以在设备屏幕上看到的内容 - 看起来非常好: 在此处输入图片说明

但是,在 Debug View Hierarchy 工具中不行:

在此处输入图片说明

如您所见,旧的 rootViewController 的视图仍然存在,UIWindow但不是它的子视图 - 正如输出所示。

这种行为看起来很奇怪,有人遇到过这个问题吗?

uiwindow ios swift

5
推荐指数
1
解决办法
1279
查看次数

斯威夫特:随机一段时间后重复动作

以前,使用Objective-C我可以使用performSelector:以便在随机时间段之后重复一个动作,该动作可能在1-3秒之间变化.但由于我无法使用performSelector:在Swift中,我尝试过使用"NSTimer.scheduledTimerWithTimeInterval".它的工作原理是为了重复这个动作.但有一个问题.设置时间变量以调用将生成随机数的函数.但似乎NSTimer每次重复动作时都会使用相同的数字.

这意味着该动作不是随机执行的,而是在游戏开始时随机生成的一段时间之后执行,并且在整个游戏期间使用.

问题是:有没有办法设置NSTimer每次执行动作时创建一个随机数?或者我应该使用不同的方法?谢谢!

random nstimer performselector sprite-kit swift

4
推荐指数
1
解决办法
3708
查看次数

Xcode中的等待/延迟(Swift)

如何在Xcode中添加延迟?

self.label1.alpha = 1.0
//delay
self.label1.alpha = 0.0
Run Code Online (Sandbox Code Playgroud)

我想让它等待大约2秒钟.我读过有关time_dispatch和导入darwin库的内容,但我无法使其工作.那么有人可以一步一步地解释它吗?

xcode delay swift

4
推荐指数
2
解决办法
1万
查看次数

Swift iOS文字转语音无法在循环中使用“延迟”

我正在尝试让iOS文本语音合成器“说”短语列表,这些短语之间存在可变的延迟。例如,我可能要说“你好”,然后等待5秒钟,然后“有人在吗?”,然后等待10秒钟,然后说“你好?” ...等等。

我在下面做了一个简单的例子,说明了我要做什么。我知道语音合成器正在讲话,其他语音被添加到队列中并按照接收顺序进行讲话。

我尝试了许多方法来实现循环中的此延迟。使用打印语句测试延迟可以确认它们是否有效,但是它们似乎干扰了text-speach-function功能,该功能说的是第一个短语,但要等到for循环完成后再说其余的内容。我认为这些类型的任何延迟都可以工作,因为我假设语音合成器是事件驱动的。

我希望能提供一些帮助,或者至少能对它为什么无法工作有所了解。谢谢!

这是示例代码:iPhone 6模拟器,Xcode 7.3

import UIKit
import AVFoundation

class ViewController: UIViewController {

    let speechSynthesizer = AVSpeechSynthesizer()
    var phraseArray: [String] = ["One", "Two", "Three", "Four", "Five", "Six", "Seven"]

    override func viewDidLoad() {
        super.viewDidLoad()
        for phrase in phraseArray{
            let speechUtterance = AVSpeechUtterance(string: phrase)
            speechSynthesizer.speakUtterance(speechUtterance)

            //"delay()" goes here.  It needs to be a variable length delay.

        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我尝试过的一些延迟方法:

  1. 将类设置为语音合成器的委托,并运行while循环,直到合成器完成。

  2. 基于时间的延迟: referenceDate = NSDate() while(NSDate().timeIntervalSinceDate(referenceDate) < 0.5) {}

  3. 我已经尝试过从堆栈中“延迟”解决方案,就像这样: 循环中的快速延迟

    func delay(delay:Double, closure:()->()) { dispatch_after( dispatch_time( DISPATCH_TIME_NOW, Int64(delay …

text-to-speech delay ios swift

4
推荐指数
1
解决办法
1360
查看次数

停止在主线程上运行的DispatchQueue

我有这段代码:

    DispatchQueue.main.asyncAfter(deadline: .now() + (delay * Double(isDelayAccounted.hashValue)) + extraDelay) {
        self.isShootingOnHold = false
        self.shoot()
        self.shootingEngine = Timer.scheduledTimer(timeInterval: (Double(60)/Double(self.ratePerMinute)), target: self, selector: #selector(ShootingEnemy.shoot), userInfo: nil, repeats: true)   
    }
Run Code Online (Sandbox Code Playgroud)

现在,我希望能够阻止此线程执行.怎么能阻止它被执行?例如,3秒后,我决定我不想再执行,所以我想停止它.

grand-central-dispatch swift dispatch-queue

4
推荐指数
2
解决办法
5660
查看次数