小编squ*_*o10的帖子

AVAudioPlayer爆裂和爆裂

我有一个类似西蒙的记忆游戏,其中播放一系列音调并且用户尝试重复音调.问题是,我不时会听到一声可怕的噼啪声.它可能只是在几个笔记之后或多达二十个.声音都是长度为2秒的wav文件.我循环通过十个玩家,以便没有任何声音被剪裁.(我已经尝试过多达50但是没有任何帮助.)我也尝试过实施,audioPlayerDidFinishPlaying这样我就可以在声音完成后停止播放器,但这也无济于事.最后,我补充说prepareToPlay()- 遗憾的是,没有区别.

一个有趣或可能没有关系的有趣问题是,在大约15个音符的序列之后,音频停止一起工作.该应用程序继续正常,但没有任何声音.

这是代码的音频部分:

func playSound(_ soundID: Int) {
        var soundName = ""

        switch soundID {
        case 0:
            soundName = "beep1"
        case 1:
            soundName = "beep2"
        case 2:
            soundName = "beep3"
        case 3:
            soundName = "beep4"
        case 4:
            soundName = "swish3"
        default:
            soundName = "clank"
        }

        guard let url = Bundle.main.url(forResource: soundName, withExtension: "wav") else { return }

        do {
            buttonSound.insert(try AVAudioPlayer(contentsOf: url, fileTypeHint: AVFileType.wav.rawValue), at: playerIndex)
            buttonSound[playerIndex].prepareToPlay()
            buttonSound[playerIndex].delegate = self

            if playerIndex < 10 { …
Run Code Online (Sandbox Code Playgroud)

avaudioplayer ios swift

12
推荐指数
1
解决办法
659
查看次数

解雇SKScene回到UIKit菜单

一旦我的SpriteKit游戏结束,我想回到我的UIKit MenuViewController.从我到目前为止所学到的,使用protocol/delegate是最好的(?)选项,但我无法让它工作.我知道协议可能会超出类声明GameViewController,看起来像:

protocol GameViewControllerDelegate {
    var gameOver: Bool?
}
Run Code Online (Sandbox Code Playgroud)

但我需要帮助从GameSceneAND获取它解雇GameViewController.以下是应用程序的骨骼,如果有帮助的话.

故事板图像

MenuViewController

class MenuViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
    }

    @IBAction func goToGame(_ sender: UIButton) {
        performSegue(withIdentifier: "toGameSegue", sender: sender.currentTitle)
    }

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if let destinationVC = segue.destination as? GameViewController {
            if let item = sender as? String {
                destinationVC.numberOfPlayers = item
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

GameViewController

class GameViewController: UIViewController {

    var numberOfPlayers: …
Run Code Online (Sandbox Code Playgroud)

ios sprite-kit skscene swift

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

SwiftUI - 如何从视图模型调用完成函数

我有一个获取邮政编码并将其传递给方法的表单。该方法查找城市和州,并将信息作为元组返回。该方法还有一个完成处理程序,以便在找到城市和州之前不会保存其余的表单数据。

我将函数移至视图模型以保持秩序,但现在我很困惑。首先,必须在函数返回之前调用完成处理程序,尽管这似乎与我想要的完全相反。我想获取城市和州的值,然后我想通过处理程序保存它们。我困惑的后半部分是函数的调用。如果我分配一个变量,例如cityState从我的方法接收元组,则保存发生在我无法访问的闭包中!(请参阅下面的设置查看代码。)

我可以将所有内容移回正常工作的视图。但我试图了解 MVVM 应该如何工作。

设置视图模型

func getCityStateFromPostalCode(zip: String, completion: @escaping () -> ()) -> (String, String) {
   let geocoder = CLGeocoder()
   var city = ""
   var state = ""
        
   geocoder.geocodeAddressString(zip) { (placemarks, error) in
      if let placemark = placemarks?[0] {
         if placemark.postalCode == zip {
            city = placemark.locality!
            state = placemark.administrativeArea!
         }
      }
      completion()
   }
   return (city, state)
} 
Run Code Online (Sandbox Code Playgroud)

设置视图

let settingsVM = SettingsViewModel()

let cityState = settingsVM.getCityStateFromPostalCode(zip: companyZip) {
   let newCompany = Company(context: self.moc) …
Run Code Online (Sandbox Code Playgroud)

viewmodel completionhandler swift swiftui

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

Swift 中的闭包和回调有什么区别?

有人问我 Objective C 块是否更类似于闭包或回调。然而,回调的定义似乎与闭包几乎相同,至少在这个借用自http://swiftspace.org/callback-function-in-swift/的示例中:

\n\n
func mainFunction(callback: () -> Void) {\n\n   // some code\n   callback()   // call the callback function\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

在《编程语言指南》(Swift 2.2)中很少提到回调,但有一个值得注意的例外,回调听起来像是一种闭包:

\n\n
\n

\xe2\x80\x9c当闭包\xe2\x80\x99s 类型已知时,例如委托的回调\n,您可以省略其参数类型、返回类型或两者。\xe2\ x80\x9d

\n
\n\n

帮助?

\n

closures callback swift

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

获取 SKSpriteNode 的位置

我有一个 SKSpriteNode(称之为 gem),它使用 SKAction 序列在屏幕上移动。我想知道宝石与我的玩家精灵碰撞时的确切位置。

到目前为止我所知道的就是什么不起作用。我尝试在 didBeginContact 中使用firstBody.node?.position,但由于某种原因,这给了我gem首次加载时的位置,而不是碰撞发生的位置。我还尝试使用我的玩家的位置,因为宝石和玩家在碰撞时非常接近, - 结果还可以,但不如我想要的那么准确。

我不确定代码是否有帮助,但就在这里,以防万一......

动画宝石

let moveGem = SKAction.moveByX(-distance - 25, y: 0.0, duration: NSTimeInterval(speedOfGem * distance))
let removeGem = SKAction.removeFromParent()
moveAndRemove = SKAction.sequence([moveGem, removeGem])
Run Code Online (Sandbox Code Playgroud)

尝试获得职位

func didBeginContact(contact: SKPhysicsContact) {
   let firstBody = contact.bodyA
   let secondBody = contact.bodyB

   if firstBody.categoryBitMask == PhysicsCategory.gem && secondBody.categoryBitMask == PhysicsCategory.player 
   {
      print(firstBody.node!.position)
   }
}
Run Code Online (Sandbox Code Playgroud)

ios sprite-kit swift

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

CABasicAnimation重复之间的延迟

下面的代码创造了一个"微光"效果,效果很好.(反射光在光滑表面上移动的外观.)它目前设置为永久重复,这很好,但是,我希望每个闪光之间有一个暂停.我可以延迟效果的开始,但我似乎无法弄清楚如何延迟每次运行.如果延迟时间是随机的,则奖励积分.

func startShimmering() {

    let light = UIColor.white.cgColor
    let alpha = UIColor.white.withAlphaComponent(0.0).cgColor

    let gradient = CAGradientLayer()
    gradient.colors = [alpha, light, alpha]
    gradient.frame = CGRect(x: -self.bounds.size.width, y: 0, width: 3 * self.bounds.size.width, height: self.bounds.size.height)
    gradient.startPoint = CGPoint(x: 1.0, y: 0.525)
    gradient.endPoint = CGPoint(x: 0.0, y: 0.5)
    gradient.locations = [0.1, 0.5, 0.9]
    self.layer.mask = gradient

    let animation = CABasicAnimation(keyPath: "locations")
    animation.fromValue = [0.0, 0.1, 0.2]
    animation.toValue = [0.8, 0.9, 1.0]
    animation.duration = 1.5
    animation.repeatCount = HUGE
    gradient.add(animation, forKey: "shimmer")
}
Run Code Online (Sandbox Code Playgroud)

delay cabasicanimation swift

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

SpriteKit 粒子发射器改变颜色

我已经使用编辑器创建了粒子效果,现在我想更改particleColor代码。我已设置particleColorSequence为 nil(否则我的颜色将来自编辑器中的色带而不是我的代码)并particleColorBlendFactor设置为 1.0。我particleColorupdate方法中分配了一个随机颜色,希望它每次通过循环都会改变。它第一次选择随机颜色,但颜色永远不会改变。有人可以解释为什么吗?

全球的

let emitter = SKEmitterNode(fileNamed: "squares.sks")
let colors = [SKColor.red, SKColor.green, SKColor.blue]
Run Code Online (Sandbox Code Playgroud)

didMove(查看:)

emitter?.particleColorBlendFactor = 1.0
emitter?.particleColorSequence = nil
addChild(emitter!)
Run Code Online (Sandbox Code Playgroud)

更新(_ currentTime :)

let random = Int(arc4random_uniform(UInt32(self.colors.count)))
emitter?.particleColor = colors[random]
Run Code Online (Sandbox Code Playgroud)

particles ios sprite-kit swift

3
推荐指数
1
解决办法
1520
查看次数

SwiftUI - 预览版在一台特定设备上停止工作

我一直在使用 iPhone 11 预览版,直到对 CoreData 进行了一些更改 - 现在我遇到了持久性存储迁移错误。如果我切换到不同的预览配置文件,一切都会按预期进行。

我的问题是,如何重置 iPhone 11 配置文件?在模拟器中,我只需删除应用程序并重新开始。但我不知道如何用 Canvas 做到这一点。谢谢!

preview swiftui

3
推荐指数
1
解决办法
1078
查看次数

斯威夫特是否紧密耦合?

在使用MVC的Swift中,使用一种常见的向前发送数据的方法prepare(for:sender:).在该方法中,您将获得对目标VC的引用并访问其属性以发送数据.但这不是考虑耦合视图控制器吗?我希望答案不是一个意见问题,因为我真的很想了解seggu如何适应MVC.

model-view-controller coupling segue swift

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

SwiftUI - NavigationLink 的目的地创建具有额外空间的视图

我已将登录页面缩减为一个导航链接,该导航链接将列表视图作为其目的地。如下图所示,问题在于,我得到的标题不是左侧间隔良好的标题,而是右侧所示的巨大空间。两种视图都是相同的,但右侧的视图是页面设计时的预览。左图是登录屏幕后的页面预览。

struct ContentView: View {
    
    var body: some View {
        NavigationView {
            NavigationLink(destination: CustomerView()) {
                Text("login")
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

这是列表视图的代码:

var body: some View {
        
        NavigationView {
            VStack {
                SearchBarView(text: $searchText)
                    .padding(.top, 0)
                List {
                    ForEach(customers.filter({searchText.isEmpty ? true : $0.name.localizedCaseInsensitiveContains(searchText)})) { customer in
                        NavigationLink(destination: CustomerDetailView(customer: customer)) {
                            CustomerRow(customer: customer)
                        }
                        .navigationBarTitle("Customers")
                    }
                }
            }
        }
        .navigationBarBackButtonHidden(true)
    }
}
Run Code Online (Sandbox Code Playgroud)

listview swiftui swiftui-navigationlink

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