小编mik*_*098的帖子

Xcode 9支持macOS Mojave

随着新的macOS Mojave明天(2018年9月24日)问世,是否会支持Xcode 9?

由于一些过时的依赖关系,我们无法将我们的一个项目切换到Xcode 10.

xcode macos-mojave

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

SpriteKit的更新功能:时间与帧速率

我是编程和Spritekit的新手,我有兴趣探索毫秒和帧率之间的关系,以及如何将更新函数用作两者之间的中介.

帧率与毫秒

从本质上讲,帧速率和时间之间的主要区别在于时间始终是一致的,而帧速率则不然(由于密集的图形程序,它可能会下降).但是,时间通常在SKScene的更新事件(每帧调用)期间进行检查和设置,所以我想弄清楚时间是如何正确计算的,当你不知道有多少帧会在一秒钟内.

我目前正在观看太空射击游戏的更新事件,其中更新功能负责计算产生另一个外星人之前的时间间隔.您可以在此处查看完整代码:http://www.globalnerdy.com/2014/08/10/a-simple-shoot-em-up-game-with-sprite-kit-and-swift-part-one-最后一件事-第一最完整的项目/

// Called exactly once per frame as long as the scene is presented in a view
// and isn't paused
override func update(currentTime: CFTimeInterval) {
    var timeSinceLastUpdate = currentTime - lastUpdateTime
    lastUpdateTime = currentTime
    if timeSinceLastUpdate > 1 {
        timeSinceLastUpdate = 1.0 / 60.0
        lastUpdateTime = currentTime
    }
    updateWithTimeSinceLastUpdate(timeSinceLastUpdate)
}
Run Code Online (Sandbox Code Playgroud)

问题

我似乎无法弄清楚为什么timeSinceLastUpdate被设置为1.0/60.我知道它与帧率和秒之间的协调有关,但有人可以向我解释这个吗?另外,为什么我们允许使用小数?我认为时间间隔属于Int类型.

更重要的是,这是为了保持游戏玩法在帧速率下降时减速?谢谢阅读!

time xcode sprite-kit swift xcode6

8
推荐指数
1
解决办法
5947
查看次数

Ncurses - 多个窗口和刷新

我正在写一个小学校项目。这是一个单词下降的游戏 - 单词从顶部移动到底部。我有一个想法,制作两个窗口(一个带有界面,第二个带有移动对象)。正如您在代码中看到的那样,单词是随机的。问题是输入。我正在使用 mvwsacanw 来写这个词。当单词在不同的窗口中移动时,有没有办法在第二个窗口中写任何东西?现在这个词正在下降,当它到达底部时,第二个窗口打开,我可以输入这个词。

希望有人会帮助我。

#include <stdio.h>
#include <ncurses.h>
#include <stdlib.h>
#include <time.h>
#include <unistd.h>

void moving(WINDOW *move)
{
    int j,random;
    char *cmp=(char*)malloc(10*sizeof(char));
    char word[6];

    wclear(move);
    box(move, 0, 0);
    mvwprintw(move, 1, 1, "PIS");
    wrefresh(move);

    srand (time (NULL));
    random=2+rand()%7;
    for(j=0; j< random ; j++) //random word
    {
        word[j]= rand()%26+'a';
    }

    int poz = 2+rand()%24; //random position of moving word


    for(int i=1; i<18; i++)
    {
        wclear(move);
        box(move,0,0);
        mvwprintw(move,i, poz, word);
        wrefresh(move);
        usleep(300000);
    }
}

void interface(WINDOW *ui)
{
    wclear(ui);
    char *cmp=(char*)malloc(10*sizeof(char)); …
Run Code Online (Sandbox Code Playgroud)

c windows ncurses

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

RunLoop vs DispatchQueue作为调度程序

使用新的Combine框架时,您可以指定用于从发布服务器接收元素的调度程序。

在将发布者分配给UI元素时RunLoop.mainDispatchQueue.main在这种情况下,两者之间有很大区别吗?第一个返回主线程的运行循环,第二个返回与主线程关联的队列。

grand-central-dispatch nsrunloop swift combine

5
推荐指数
3
解决办法
260
查看次数

在 SwiftUI 中动态更改动画的持续时间

我正在尝试在动画播放时更改动画的持续时间。我有两个属性 -isAnimating决定动画是否应该运行和duration. 有一个正在动画化的视图、用于切换的按钮isAnimating和绑定到持续时间状态的滑块。当动画正在播放并且我使用滑块更改值时,持续时间不会改变。有什么办法可以实现我想要的吗?

struct ContentView: View {
    @State var isAnimating = false
    @State var duration = 2.0
    
    var body: some View {
        VStack {
            Spacer()
            Circle()
                .frame(width: 50.0, height: 50.0)
                .scaleEffect(isAnimating ? 2.0 : 1.0)
                .animation(
                    isAnimating ?
                        Animation.easeOut(duration: duration).repeatForever(autoreverses: false) :
                        .default
            )
            
            Spacer()
            
            Button(
                action: { self.isAnimating.toggle() },
                label: { Text("Tap") }
            )
            
            Spacer()
            
            Slider(value: $duration, in: (0.1 ... 5.0))
                .padding([.horizontal], 20.0)
                .padding([.bottom], 50.0)
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我也尝试了不同的方法,但总是存在一些问题(例如动画视图闪烁)。

animation ios swift watchos swiftui

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

NSExtensionRequestHandling 不处理本机消息

我正在尝试为我的本机应用程序创建 Safari Web 扩展。我想要一个带有按钮的弹出窗口,单击该按钮将与我的本机应用程序进行通信。在开始这部分之前,我在发送本机消息并在beginRequest符合NSExtensionRequestHandling协议的类的函数中处理它时遇到了问题。我没有做太多事情,因为我依赖于 Xcode 生成的代码。

manifest.json我添加了这样nativeMessaging的权限:

"permissions": [ "nativeMessaging" ]
Run Code Online (Sandbox Code Playgroud)

popup.js其中包含事件监听器:

console.log("Hello World!", browser);

document.addEventListener('DOMContentLoaded', function() {
    var checkPageButton = document.getElementById('clickIt');
    checkPageButton.addEventListener('click', function() {
        console.log("click")
        browser.runtime.sendNativeMessage({ message: "Hello" });
    }, false)
}, false)
Run Code Online (Sandbox Code Playgroud)

当我检查弹出元素时,我可以看到消息Hello World并显示click消息,但正如我之前提到的 -beginRequest没有被调用。有什么遗漏吗?我也观看了WWDC20 的Meet Safari Web Extensions 会议,但没有找到答案。

javascript safari-extension safariservices safari-web-extension

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

检测 AVAudioPlayer 中的播放结束

我有几个短的 .mp3 声音,我将它们存储在数组中,并希望连续播放它们。有什么方法可以检测 AVAudioPlayer 何时停止播放,以便我可以调用完成处理程序并播放下一个声音?我知道有一个委托,但我正在使用 Playground 和 SKScene。

avfoundation avaudioplayer swift swift-playground

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

从 UITests 执行 UIAccessibilityCustomAction

我有一个 UIView 的子类,假设它class DemoView: UIView { }包含 UILabel 和 UIButton。我需要对其进行分组并添加 UIAccessibilityCustomAction,因此我覆盖了var accessibilityElements: [Any]?并使用 union 来连接两个元素。我还将“Users”字符串分配给accessibilityLabel.

从用户的角度来看,它应该正常工作,VoiceOver 会读取Users,然后用户可以选择名为 的自定义操作Edit

问题是我不知道如何从 UITests 触发这个自定义操作。我知道它XCUIElement包含数组UICustomActions并且我可以获得它的选择器,但是然后呢?

accessibility ios uiaccessibility xctest xcode-ui-testing

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

当用户拒绝该位置时显示位置请求提示

当用户拒绝跟踪他的位置并且整个应用程序基于当前位置时,处理情况的正确方法是什么?我locationAuthorization()在viewDidAppear中调用一个,当用户允许该位置时,它工作正常.

func locationAuthorization(){
    if CLLocationManager.authorizationStatus() == .authorizedWhenInUse{
        refreshData()

    } else if (CLLocationManager.authorizationStatus() == .denied) {
        addressButton.isHidden = true
    } else {
        locationManager.requestWhenInUseAuthorization()
        sleep(2)
        locationAuthorization()
    }
}
Run Code Online (Sandbox Code Playgroud)

我试图在locationAuthorization()内部调用.denied语句,但它显然不起作用.投入locationManager.requestWhenInUseAuthorization()也没有用.那么当用户点击"不允许"时,处理这种情况的最佳方法是什么?它使我的应用程序无法使用,所以我必须显示位置窗口,直到用户接受它.

core-location cllocationmanager swift

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

多个 UITextFields 和 textDidChangeNotification 通知

我最近在玩 Combine 框架,想知道是否可以创建一些智能扩展来获取作为 Publisher 的文本更改。

假设我有两个 UITextFields:

firstTextField.textPub.sink {
    self.viewModel.first = $0
}

secondTextField.textPub.sink {
    self.viewModel.second = $0
}
Run Code Online (Sandbox Code Playgroud)

其中第一个和第二个变量只是 `@Published var first/second: String = ""

extension UITextField {
    var textPub: AnyPublisher<String, Never> {
        return NotificationCenter.default
            .publisher(for: UITextField.textDidChangeNotification)
            .map {
                guard let textField = $0.object as? UITextField else { return "" }
                return textField.text ?? ""
            }
            .eraseToAnyPublisher()
    }
}
Run Code Online (Sandbox Code Playgroud)

这不起作用,因为我使用的是 NotificationCenter 的共享实例,所以当我对任何 textField 进行任何更改时,它都会将新值传播到两个sink闭包。你认为有什么方法可以实现类似于rx.textRxSwift 中可用的东西吗?我正在考虑使用addTargetwith 闭包,但它需要使用来自 Objective-C 的关联对象。

uikit swift combine

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

触发CombineLatest在Combine中传播初始值

我有两个字符串发布者和一个返回 AnyPublisher 的计算属性。逻辑很简单,但我想知道是否有任何方法可以传播初始值。我认为这应该是可能的,因为出版商有初始值。

在 VC 中,我从 ViewModel(从 textField)为 Publishers 分配新值。

firstTextField.addTarget(self, action: #selector(firstTextFieldDidChange(_:)), for: .editingChanged)
secondTextField.addTarget(self, action: #selector(secondTextFieldDidChange(_:)), for: .editingChanged)

@objc private func firstTextFieldDidChange(_ textField: UITextField) {
 viewModel.firstPublisher = textField.text ?? ""
}
@objc private func secondTextFieldDidChange(_ textField: UITextField) {
 viewModel.secondPublisher = textField.text ?? ""
}
Run Code Online (Sandbox Code Playgroud)

然后我将 Publisher (combineLatest) 分配给我的按钮:

_ = viewModel.validatedText
   .receive(on: RunLoop.main)
   .assign(to: \.isEnabled, on: button)
Run Code Online (Sandbox Code Playgroud)

在 VM 中我有两个发布者:

@Published var firstPublisher: String = ""
@Published var secondPublisher: String = ""
Run Code Online (Sandbox Code Playgroud)

并结合最新:

var validatedText: AnyPublisher<Bool, Never> { …
Run Code Online (Sandbox Code Playgroud)

reactive-programming swift combinelatest combine

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

视图以超级视图为中心,视图位于 SwiftUI 的顶部

我试图在 UIKit 中实现一些非常简单的事情 - 一个视图始终位于中心(图像),第二个视图(文本)位于其顶部,两个视图之间有一定的间距。我尝试了许多不同的方法(主要是使用alignmentGuide但没有任何效果如我所愿)。

代码:

ZStack {
    Rectangle()
        .foregroundColor(Color.red)
    
    VStack {
        Text("Test")
            .padding([.bottom], 20) // I want to define spacing between two views
        
        Image(systemName: "circle")
            .resizable()
            .alignmentGuide(VerticalAlignment.center, computeValue: { value in
                value[VerticalAlignment.center] + value.height
            })
            .frame(width: 20, height: 20)
    }
}
.frame(width: 100, height: 100)
Run Code Online (Sandbox Code Playgroud)

结果:

在此输入图像描述

正如您所看到的,图像并不完全居中,它实际上取决于Text. 有没有办法强制垂直和水平对齐在超级视图和布局第二个视图中居中而不影响居中视图?

ios swiftui vstack

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

HTML file as a variable in Node.js

I need to send something as a html via email (I'm using Sendgrid) with simple Node.js server. I'm just sending some text with variables in them and line breaks.

var postData = 'lat: ' + formatted.latitude + '<br>lng: ' + formatted.longitude + '<br>time: ' + formattedDate;
sendEmail(postData);
Run Code Online (Sandbox Code Playgroud)

Then I'm sending the email with Sendgrid as a HTML.

var content = new helper.Content('text/html', messageContent);
Run Code Online (Sandbox Code Playgroud)

No need to paste remaining blocks of code.

What I need is more complex .html file with …

html node.js sendgrid

0
推荐指数
1
解决办法
3140
查看次数