我有以下方法(例如),我希望能够在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)
我有更常见的助手,比如那里我也想提供.如何构建应用程序来实现此目的?
请参阅底部更新(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) 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) 我是一个仍在学习的新程序员,所以如果我的代码看起来像废话,请原谅我。我正在编写一个程序,它有一个名为“infoViewController”的 ViewController,上面有多个 UITextFields。用户应该填写文本字段,然后单击屏幕右上角的“下一步”按钮,然后激活“显示”转场并将它们带到下一个 VC。来自文本字段的所有信息都存储在常量中,以便以后我获取他们输入的信息并将其放在最后生成的 .PDF 文件中。我希望用户能够轻松浏览文本字段,因此我将其设置为用户在 TextField 上并单击键盘上的“下一步”时的位置,它将它们移动到下一个 TextField,以便他们可以快速轻松地将它们全部填满。我遇到的问题是,由于某种原因,当我单击键盘上的“下一步”时,我不断收到此错误:
[快照] 对至少未渲染过一次的视图 (0x7f89955786c0, _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)
我希望能够安排在未来的绝对或相对时间运行闭包.我看到我可以NSTimer
用来安排稍后调用的选择器,但这不是我想要的.我更愿意看到这样的事情:
let timer = NSTimer.scheduleWithTimeInterval(
ti: NSTimerInterval(1.0),
action: {
// do something
}
)
Run Code Online (Sandbox Code Playgroud)
在Swift中有没有内置的方法来做这样的事情?
我现在遇到的dispatch_after
似乎更符合我的想法,但我对其他想法持开放态度.
我有一个基本情况,当用户通过身份验证时,我删除当前屏幕(登录屏幕)并将其更改为应用程序内的另一个屏幕。
为此,我使用以下代码:
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
但不是它的子视图 - 正如输出所示。
这种行为看起来很奇怪,有人遇到过这个问题吗?
以前,使用Objective-C我可以使用performSelector:以便在随机时间段之后重复一个动作,该动作可能在1-3秒之间变化.但由于我无法使用performSelector:在Swift中,我尝试过使用"NSTimer.scheduledTimerWithTimeInterval".它的工作原理是为了重复这个动作.但有一个问题.设置时间变量以调用将生成随机数的函数.但似乎NSTimer每次重复动作时都会使用相同的数字.
这意味着该动作不是随机执行的,而是在游戏开始时随机生成的一段时间之后执行,并且在整个游戏期间使用.
问题是:有没有办法设置NSTimer每次执行动作时创建一个随机数?或者我应该使用不同的方法?谢谢!
如何在Xcode中添加延迟?
self.label1.alpha = 1.0
//delay
self.label1.alpha = 0.0
Run Code Online (Sandbox Code Playgroud)
我想让它等待大约2秒钟.我读过有关time_dispatch和导入darwin库的内容,但我无法使其工作.那么有人可以一步一步地解释它吗?
我正在尝试让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)
这是我尝试过的一些延迟方法:
将类设置为语音合成器的委托,并运行while循环,直到合成器完成。
基于时间的延迟: referenceDate = NSDate() while(NSDate().timeIntervalSinceDate(referenceDate) < 0.5) {}
我已经尝试过从堆栈中“延迟”解决方案,就像这样: 循环中的快速延迟
func delay(delay:Double, closure:()->()) {
dispatch_after(
dispatch_time(
DISPATCH_TIME_NOW,
Int64(delay …
我有这段代码:
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秒后,我决定我不想再执行,所以我想停止它.