我正在创建单个选择列表以在我的应用程序的不同位置使用。
问题:
有没有我不知道的简单解决方案?
如果没有,我该如何完成当前的解决方案?
我的目标:
我当前的解决方案如下: 选择第二项的列表视图
我不能使用 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) 我遇到了通过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) 如何从 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) 大家好,任何人都可以帮助我们如何使用 Swift 语言或故事板在 Xcode 中更改 UITextView 的光标闪烁颜色。
我有一个 iOS + watchOS 应用程序,我想使用相同的数据模型。所以我创建了一个 CoreData 堆栈,并为NSPersistentCloudKitContainer.
我的 iOS 应用程序可以访问 CloudKit 容器,因为我可以从控制台中的日志中读取内容,但是当我的 watchOS 应用程序想要连接到 CloudKit 容器(与iCloud.foo.myIDiOS 应用程序相同)时,我收到一条错误消息Invalid bundle ID for container: .
我尝试了几个新容器。我还尝试一次又一次地检查功能窗格上的所有复选框。
我错过了什么吗?
(我还阅读了Core data + CloudKit - iOS 和 watchOS 配套应用程序之间的共享,但这没有帮助)
我正在寻找计算 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)
谢谢
我试图将一个视图注入另一个视图以避免代码重复。
我想出了这个主意:
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 中实现这样的目标?
我正在尝试使用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) 在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现在正确的方法是什么?
ios ×7
swift ×6
scenekit ×3
swiftui ×2
apple-watch ×1
avplayer ×1
cloudkit ×1
cocoa-touch ×1
core-data ×1
f# ×1
ios13 ×1
list ×1
quaternions ×1
selection ×1
skvideonode ×1
swift5 ×1
touch ×1
video ×1