当前位置: 首页 > 面试题库 >

在Swift 2.0中一次显示一个字符

石苏燕
2023-03-14
问题内容

Swift 2.0的新功能;尝试学习它,对动画感兴趣,并尝试编写一些代码以一次在屏幕上显示一条消息。

我写了这个,它可以工作,但是我不能帮忙,但是我可能无法对CALayers和/或alpha值做些什么?或一些动画小玩意,更值得一去;这感觉和看起来有点笨拙,确实在1977年。

import UIKit

class ViewController: UIViewController {

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.


let supertext  = "A long time ago, in a galaxy far, far away ..."
let round = supertext.characters.count
for i in 0...round {
    let delay = Double(i)/10
    let subtext = supertext[supertext.startIndex..<supertext.startIndex.advancedBy(i)]
    NSTimer.scheduledTimerWithTimeInterval(delay, target: self, selector: "ghostText:", userInfo: ["theText" :subtext], repeats: false)
    }
}

var view3:UITextView = UITextView()

func ghostText(timer:NSTimer) {
    view3.removeFromSuperview()
    let userInfo = timer.userInfo as! Dictionary<String, AnyObject>
    let tempText:NSString = (userInfo["theText"] as! NSString)
    print(tempText)

    let font = UIFont(name: "Georgia", size: 18.0) ?? UIFont.systemFontOfSize(18.0)
    let textFont = [NSFontAttributeName:font]

    let subChararacter = NSAttributedString(string: String(tempText), attributes: textFont)
    view3.frame = CGRect(x: 100, y: 120, width: CGRectGetWidth(self.view.frame), height: CGRectGetWidth(self.view.frame)-20)
    view3.attributedText = subChararacter
    self.view.addSubview(view3)
}

问题答案:

我想Swiftworthy是主观的,但这是另一个基于您代码当前工作方式的实现,该实现将NSTimer包装在Swift类中。

class Timer {
    typealias TimerFunction = (Int)->Bool
    private var handler: TimerFunction
    private var i = 0

    init(interval: NSTimeInterval, handler: TimerFunction) {
        self.handler = handler
        NSTimer.scheduledTimerWithTimeInterval(interval, target: self, selector: "timerFired:", userInfo: nil, repeats: true)
    }

    @objc
    private func timerFired(timer:NSTimer) {
        if !handler(i++) {
            timer.invalidate()
        }
    }
}

class ViewController: UIViewController {
    let text: NSAttributedString = {
        let font = UIFont(name: "Georgia", size: 18.0) ?? UIFont.systemFontOfSize(18.0)
        return NSAttributedString(string: "A long time ago, in a galaxy far, far away ...", attributes: [NSFontAttributeName: font])
    }()

    override func viewDidLoad() {
        super.viewDidLoad()

        let textView = UITextView(frame: CGRect(x: 100, y: 120, width: CGRectGetWidth(self.view.frame), height: CGRectGetWidth(self.view.frame)-20))
        self.view.addSubview(textView)

        let _ = Timer(interval: 0.1) {i -> Bool in
            textView.attributedText = self.text.attributedSubstringFromRange(NSRange(location: 0, length: i+1))
            return i + 1 < self.text.string.characters.count
        }
    }
}


 类似资料:
  • 问题内容: 我正在尝试制作一个程序,一次显示3个框。我以为,如果您为设置一个类,它将每秒显示一个新框。 所以这是我想出的代码: } 它有效,但不是我想要的方式。在上一个按ok之后,它每秒显示一个新框,而不是每秒显示一个新框。 因此,当我按下“按下”键时,它会等待1秒钟并产生一个盒子。当我按“确定”时,它会等待1秒钟并生成另一个,依此类推。知道如何使3个盒子接连产生1个吗? 问题答案: 使用JOpt

  • 当我在文件中设置Image并在资产中设置它时,我对flutter < code > image . assets 有一个问题,如下所示: `颤振:使用材质设计:真实资源: 图片/facebook.png' 当我把它放在代码中时: 并运行它,它运行良好,但我第二次运行代码时,它不显示,这是我得到的错误: I/颤振 (4784): ═══ 图像资源服务捕获的异常 ╞══════════════════

  • 闪屏应该在我每次使用应用程序时都能工作,但一旦我从任务管理器中清除应用程序并重新启动它。 动画不会出现,它会直接进入登录屏幕,不会出现动画。

  • 我试着把第二个播放器放在一个有圆角的框架内(这个答案和这个答案),但是播放器总是会跳出父框架并绘制视频的完整矩形。 我发现这个解决方案使用GLSurfaceView,但是这个解决方案使用经典的MediaPlayer而不是ExoPlayer。

  • 我正在使用控件。我在每一页中都有一个图像和许多。我使用左、右填充以及在显示选定页面时部分显示下一页和上一页。 我想一次显示多个页面,而正在。一旦滚动停止,您希望仅在中间显示选定页面,并部分显示上一页和下一页(就像滚动开始之前一样)。 我尝试在< code>ViewPager滚动时增加“左”和“右”填充,并在滚动停止时重置< code >填充。增加填充效果很好,我可以一次看到多个页面。但是将填充重置

  • 问题内容: 例, 我有 然后我输入一个空值。 它说,“不能为空,长度必须在2到35之间” 是否可以告诉spring每个字段一次验证一次? 问题答案: 是的,有可能。只需像这样创建自己的注释: 重要的部分是@ReportAsSingleViolation批注