我在延迟计算机在游戏中的移动方面遇到了问题.
我找到了一些解决方案,但它们在我的情况下不起作用,例如
var delay = NSTimer.scheduledTimerWithTimeInterval(4, target: self, selector: nil, userInfo: nil, repeats: false)
Run Code Online (Sandbox Code Playgroud)
我尝试使用它与功能,fire
但也没有效果.
还有哪些其他可能性?
我的iPhone应用程序中有一个可编辑的UITextView.
每当用户选择特定功能时,都会在UITextView内创建新按钮.
由于按钮总是放在文本视图的左侧,我需要将光标放在按钮的右侧,以便用户可以看到他们正在键入的内容.我似乎无法找到一个文档(或未记录)方法来设置光标的位置.
有没有人有任何想法或有其他人有类似的东西吗?
我想让活动指示器开始动画,然后在一秒后停止.
那么有谁知道我怎么能这样做?
class stuff {
@IBOutlet weak var indicator: UIActivityIndicatorView!
func iGotTriggeredBySomething {
indicator.startAimating()
//delay?
indicator.stopAnimating()
}
}
Run Code Online (Sandbox Code Playgroud)
谢谢回答.
我有一个长按手势一组UITableView
呈现一个UIAlertController
包含单元格的文本.当UIAlertController
提出时,我得到这个警告:
Attempt to present <UIAlertController: 0x7fd57384e8e0> on <TaskAppV2.MainTaskView: 0x7fd571701150> which is already presenting (null)
Run Code Online (Sandbox Code Playgroud)
根据我的理解,MainTaskView(UITableView
)已经呈现了一个视图,因此它不应该呈现第二个视图,UIAlertController.
所以我从类似的问题尝试了这个解决方案.它不起作用,因为我收到相同的警告.我该怎么做才能解决这个警告?请参阅下面的代码:
func longPressedView(gestureRecognizer: UIGestureRecognizer){
/*Get cell info from where user tapped*/
if (gestureRecognizer.state == UIGestureRecognizerState.Ended) {
var tapLocation: CGPoint = gestureRecognizer.locationInView(self.tableView)
var tappedIndexPath: NSIndexPath? = self.tableView.indexPathForRowAtPoint(tapLocation)
if (tappedIndexPath != nil) {
var tappedCell: UITableViewCell? = self.tableView.cellForRowAtIndexPath(tappedIndexPath!)
println("the cell task name is \(tappedCell!.textLabel!.text!)")
} else {
println("You didn't tap on a cell")
}
}
/*Long …
Run Code Online (Sandbox Code Playgroud) 我已经尝试将它放在我的代码的各个部分,比如在commitEditingStyle方法的末尾,但我无法让它停止编辑模式.基本上,我想在没有更多单元格的情况下自动退出编辑模式...
if ([self.tableView numberOfRowsInSection:0] ==0)
{
NSLog(@"this triggers, but doesn't stop editing..");
self.tableView.editing = NO;
[self.tableView endEditing:YES];
}
Run Code Online (Sandbox Code Playgroud) 从各方面来看,Ashley Smart提出的Obj-C中的这个问题是一个很好的解决方案(如何检测UIScrollView何时完成滚动).
-(void)scrollViewDidScroll:(UIScrollView *)sender
{
[NSObject cancelPreviousPerformRequestsWithTarget:self];
//ensure that the end of scroll is fired.
[self performSelector:@selector(scrollViewDidEndScrollingAnimation:) withObject:nil afterDelay:0.3];
...
}
-(void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView
{
[NSObject cancelPreviousPerformRequestsWithTarget:self];
...
}
Run Code Online (Sandbox Code Playgroud)
但是,我需要一个解决方案,在Swift中.
似乎由Matt(dispatch_after - GCD in swift?)贡献的优秀延迟函数可能会有所帮助.
func delay(delay:Double, closure:()->()) {
dispatch_after(
dispatch_time(
DISPATCH_TIME_NOW,
Int64(delay * Double(NSEC_PER_SEC))
),
dispatch_get_main_queue(), closure)
}
Run Code Online (Sandbox Code Playgroud)
并实施为......
delay(0.4) {
// do stuff
}
Run Code Online (Sandbox Code Playgroud)
但我还是没把它放在一起.有帮助吗?
我正在制作Mac应用程序(在Swift 3中使用Xcode 8,Beta 5),用户可以使用该应用程序进行长注并将其导出为PDF.
要创建此PDF,我使用Cocoa的dataWithPDF:
方法,使用以下代码:
do {
// define bounds of PDF as the note text view
let rect: NSRect = self.noteTextView.bounds
// create the file path for the PDF
if let dir = NSSearchPathForDirectoriesInDomains(FileManager.SearchPathDirectory.documentDirectory, FileManager.SearchPathDomainMask.allDomainsMask, true).first {
// add the note title to path
let path = NSURL(fileURLWithPath: dir).appendingPathComponent("ExportedNote.pdf")
// Create a PDF of the noteTextView and write it to the created filepath
try self.noteTextView.dataWithPDF(inside: rect).write(to: path!)
} else {
print("Path format incorrect.") // never happens to …
Run Code Online (Sandbox Code Playgroud) 根据@matt 使用的这个精彩答案dispatch_after
,我在操场上尝试了代码,它工作正常(没有错误).但是,当我尝试执行向后兼容时DispatchTime.now()
,iOS 10
只有这样才可用:
func delay( _ delay: Double, closure: () -> ()){
guard #available(iOS 10, *) else {
dispatch_after(
dispatch_time(
DISPATCH_TIME_NOW,
Int64(delay * Double(NSEC_PER_SEC))
),
dispatch_get_main_queue(), closure)
return
}
let when = DispatchTime.now() + delay
DispatchQueue.main.after(when: when, execute: closure)
}
Run Code Online (Sandbox Code Playgroud)
编译器提供修复DISPATCH_TIME_NOW
to Replace "DISPATCH_TIME_NOW" with "dispatch_time_t(DISPATCH_TIME_NOW)"
并抛出错误说
无法将'Int'类型的值转换为预期的参数类型'dispatch_time_t'(又名'UInt64')
我尝试修复它,因为编译器提供但最终导致更多错误.我应该如何在这里使用向后兼容性?我在做什么错了?请帮助,谢谢!
我想找出一种方法,这样,如果用户按下"取消"按钮(我认为不能删除)ABPeoplePickerNavigationController
,视图控制器要么不关闭,要么自动重新打开.
例如,给出以下内容:
var picker = ABPeoplePickerNavigationController()
picker.peoplePickerDelegate = self
self.presentViewController(picker, animated: true, completion: nil)
Run Code Online (Sandbox Code Playgroud)
我希望能够做到这样的事情:
if (self.presentedViewController != picker && !userContinuedPastPicker) {
//where userContinuedPastPicker is a boolean set to false
//in a delegate method called when the user clicks on an a contact
//(meaning the user didn't press the cancel button but instead clicked on a contact)
//create and present a UIAlertAction informing the user they must select a contact
//present picker again
self.presentViewController(picker, animated: true, completion: nil) …
Run Code Online (Sandbox Code Playgroud) uinavigationcontroller abaddressbook ios presentviewcontroller swift
我有这个延迟功能:
func delay(delay:Double, closure:()->()) {
dispatch_after(
dispatch_time(
DISPATCH_TIME_NOW,
Int64(delay * Double(NSEC_PER_SEC))
),
dispatch_get_main_queue(), closure)
}
Run Code Online (Sandbox Code Playgroud)
从这里: dispatch_after - GCD在swift?
这段代码:
func start(){
for index in 1...3 {
delay(3.0){
println(index)
}
}
}
Run Code Online (Sandbox Code Playgroud)
3秒后,它给出:
3
3
3
我的目标:
3秒后:1
6秒后:2
9秒后:3
我该如何实现这一目标?谢谢,
ios ×8
swift ×8
delay ×2
iphone ×2
objective-c ×2
swift3 ×2
uitableview ×2
cocoa ×1
loops ×1
macos ×1
nstimer ×1
pdf ×1
uiscrollview ×1
uitextview ×1
xcode ×1
xcode8 ×1