小编Nic*_* S.的帖子

如何使用 SwiftUI 单选制作列表

我正在创建单个选择列表以在我的应用程序的不同位置使用。


问题:

有没有我不知道的简单解决方案?

如果没有,我该如何完成当前的解决方案?


我的目标:

  1. 始终仅选择一项或一项或未选择一项的列表(取决于配置)
  2. 透明背景
  3. 在项目选择上 - 执行通过 init() 方法设置为参数的操作。(该操作需要所选项目信息。)
  4. 以编程方式更改列表数据并将选择重置为第一项

我当前的解决方案如下: 选择第二项的列表视图

我不能使用 Picker,因为外部操作(目标 3)很耗时。所以我认为它不会顺利进行。很可能在 SwiftUI 中有我的问题的解决方案,但是我错过了它,因为我是 swift 的新手,或者我理解并不是所有的东西都在 SwiftUI 中完美运行,例如:List 的透明背景(这就是为什么我需要清除init() 中的背景)。

所以我开始自己实现选择,并在此处停止:单击 item(Button) 时,我当前的解决方案不会更新视图。(只有出去和回到页面更新视图)。并且仍然可以选择多个项目。

import SwiftUI

struct ModuleList: View {
    var modules: [Module] = []
    @Binding var selectionKeeper: Int
    var Action: () -> Void


    init(list: [Module], selection: Binding<Int>, action: @escaping () -> Void) {
        UITableView.appearance().backgroundColor = .clear
        self.modules = list
        self._selectionKeeper = selection
        self.Action = action
    }

    var body: some View {
        List(){
            ForEach(0..<modules.count) { …
Run Code Online (Sandbox Code Playgroud)

list selection swift ios13 swiftui

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

为什么UIViewController touchesBegan,touchesMoved&touchesEnded仅在两个触摸的第一个开始,移动或结束时被调用?

我遇到了通过UIViewController的touchesBegan/Moved/Ended方法处理多个触摸的问题.我也在cocos2d应用程序中看到相同的行为(使用ccTouchesBegan/Moved/Ended),所以我认为这个问题可以应用于iOS中的所有触摸处理.我已经把我正在使用的代码放在下面,然后是我看到的结果.

所有方法都在UIViewController子类上实现.

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    NSLog(@"Touches Began");
    [self logTouchesFor: event];

    [super touchesEnded: touches withEvent: event];
}

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
    NSLog(@"Touches Moved");
    [self logTouchesFor: event];

    [super touchesEnded: touches withEvent: event];
}

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
    NSLog(@"Touches Ended");
    [self logTouchesFor: event];

    [super touchesEnded: touches withEvent: event];
}

-(void)logTouchesFor:(UIEvent *)event
{
    int count = 1;

    for (UITouch *touch in event.allTouches)
    {
        CGPoint location = [touch locationInView: self.view];

        NSLog(@"%d: (%.0f, %.0f)", count, location.x, location.y);
        count++;
    } …
Run Code Online (Sandbox Code Playgroud)

cocoa-touch touch ios

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

如何在iTunes Connect中更改In App Purchase Subscription的价格

我试图在iTunes Connect中更改自动续订订阅的价格,但我找不到任何选项.我怎样才能改变价格?价格已经设定,我可以设置一个介绍价格.该应用尚未发布,我不想删除IAP,因为我将失去我的本地化.

iTunes Connect订阅定价窗格

itunesconnect ios

8
推荐指数
2
解决办法
6013
查看次数

确定 SceneKit 中 SKVideoNode 的视频大小/长宽比

如何从 AVPlayer 获取视频的视频大小来设置节点的几何大小?

例如,我有一个具有宽度和高度的 SCNPlane

let planeGeo = SCNPlane(width: 5, height: 5)
Run Code Online (Sandbox Code Playgroud)

所以现在我实例化我的视频播放器

let videoURL = NSURL(string: someURL)
let player = AVPlayer(URL: videoURL!)
Run Code Online (Sandbox Code Playgroud)

和我的 SKVideoNode

let spriteKitScene = SKScene(size: CGSize(width: 1920, height: 1080))
spriteKitScene.scaleMode = .AspectFit

videoSpriteKitNode = SKVideoNode(AVPlayer: player)
videoSpriteKitNode.anchorPoint = CGPointMake(0,0)
videoSpriteKitNode.size.width = spriteKitScene.size.width
videoSpriteKitNode.size.height = spriteKitScene.size.height

spriteKitScene.addChild(videoSpriteKitNode)

planeGeo!.firstMaterial.diffuse.contents = spriteKitScene
videoSpriteKitNode.play()
Run Code Online (Sandbox Code Playgroud)

所以现在我想要视频大小来将我的飞机大小调整为正确的宽高比。我已经摆弄了 AVLPlayerLayer 但这总是给我 0

let avLayer = AVPlayerLayer(player: player)
print(avLayer.videoRect.width) //0
print(avLayer.videoRect.height) //0
Run Code Online (Sandbox Code Playgroud)

我也在这里尝试过,但效果不佳

let avLayer = AVPlayerLayer(player: player)
let layer = avLayer.sublayers![0]
let transformedBounds = …
Run Code Online (Sandbox Code Playgroud)

video avplayer scenekit skvideonode swift

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

如何在 Xcode 中更改 UITextView 光标闪烁颜色

大家好,任何人都可以帮助我们如何使用 Swift 语言或故事板在 Xcode 中更改 UITextView 的光标闪烁颜色。

ios swift

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

iOS 上的 CloudKit + CoreData 和 watchOS 同步无法正常工作

我有一个 iOS + watchOS 应用程序,我想使用相同的数据模型。所以我创建了一个 CoreData 堆栈,并为NSPersistentCloudKitContainer.

我的 iOS 应用程序可以访问 CloudKit 容器,因为我可以从控制台中的日志中读取内容,但是当我的 watchOS 应用程序想要连接到 CloudKit 容器(与iCloud.foo.myIDiOS 应用程序相同)时,我收到一条错误消息Invalid bundle ID for container: .

我尝试了几个新容器。我还尝试一次又一次地检查功能窗格上的所有复选框。

我错过了什么吗?

(我还阅读了Core data + CloudKit - iOS 和 watchOS 配套应用程序之间的共享,但这没有帮助)

core-data ios cloudkit apple-watch

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

获取SCNText几何体的宽度/高度

我正在寻找计算 SCNText 几何尺寸的可能性。我想制作一行单独的文本节点,在文本周围有一个框架。

假设文本宽度为 5pt。我想要一个 SCNPlane 作为背景,宽度为 7pt,文本居中。如何动态计算文本大小?我尝试了不同的东西..等宽字体,计算更大和更小的字符等。但它没有成功。

像这样:

----------  ----------
|  Text  |  |  Text  |
----------  ----------
Run Code Online (Sandbox Code Playgroud)

这里有一些示例代码:

let textGeometry = SCNText(string: name, extrusionDepth: 0.1)
textGeometry.font = UIFont(name: "Helvetica Neue", size: 1)
let textNode = SCNNode(geometry: textGeometry);
Run Code Online (Sandbox Code Playgroud)

谢谢

ios scenekit swift

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

将视图注入到 SwiftUI 中的视图中

我试图将一个视图注入另一个视图以避免代码重复。

我想出了这个主意:

struct WrapperView: View {
    
    var injectedView: some View
    
    var body: some View {
        VStack {
            injectedView
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

但我收到一个错误:Property declares an opaque return type, but has no initializer expression from which to infer an underlying type

我怎样才能在 SwiftUI 中实现这样的目标?

ios swiftui

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

SCNQuaternion乘法

我正在尝试使用Swift在SceneKit中执行SCNQuaternion Multiplication.以下代码在F#(Xamarin iOS开发)中.我正在尝试将该代码转换为Swift.

我陷入困境:让dqm = SCNQuaternion.Multiply ... SceneKit没有名为multiply的成员.

知道我怎么能这样做吗?

    let rr = CMAttitudeReferenceFrame.XArbitraryCorrectedZVertical
    this.motion.DeviceMotionUpdateInterval <- float (1.0f / 30.0f)
    this.motion.StartDeviceMotionUpdates (rr,NSOperationQueue.CurrentQueue, (fun d e ->
        let a = this.motion.DeviceMotion.Attitude
        let q = a.Quaternion
        let dq = new SCNQuaternion(float32 q.x, float32 q.y, float32 q.z, float32 q.w)
        let dqm = SCNQuaternion.Multiply (dq, SCNQuaternion.FromAxisAngle(SCNVector3.UnitZ, piover2))
        camNode.Orientation <- dqm
        ()
    ))
Run Code Online (Sandbox Code Playgroud)

f# quaternions ios scenekit swift

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

如何在Swift 5中遍历字典?

在Swift 4中,下面的代码可以工作,但是在Swift 5中,出现以下错误: Type 'Dictionary<String, String>.Values.Iterator' does not conform to protocol 'Sequence'

guard let userIds = users.values.makeIterator() else { return }

for userId in userIds {
    // User setup
}
Run Code Online (Sandbox Code Playgroud)

Swift 5现在正确的方法是什么?

swift swift5

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