我正在尝试获取我的CAGradientLayers,我正在使用它创建漂亮的渐变背景,在旋转和模态视图演示时很好地调整大小,但它们不会播放球.
这是我刚创建的一个视频,显示了我的问题:请注意旋转时撕裂.
另请注意,此视频是通过在OS X上拍摄iPhone模拟器而创建的.我放慢了视频中的动画以突出显示我的问题.
这是我刚刚创建的Xcode项目(这是视频中显示的应用程序的源代码),基本上如图所示,旋转时出现问题,尤其是当模式呈现视图时:
Xcode Project,使用CAGradientLayer背景以模态方式呈现视图......
我理解使用以下内容是值得的:
[[self view] setBackgroundColor:[UIColor blackColor]];
Run Code Online (Sandbox Code Playgroud)
做一个合理的工作,使转换更加无缝,不那么刺耳,但如果你看我的视频,虽然目前处于横向模式,模态呈现一个视图,你会明白为什么上面的代码无济于事.
我有什么想法可以解决这个问题吗?
约翰
这是一个示例类的布局,有人可以指导我在创建NSObject的子类时的最佳实践吗?
class MyClass: NSObject {
var someProperty: NSString! = nil
override init() {
self.someProperty = "John"
super.init()
}
init(fromString string: NSString) {
self.someProperty = string
super.init()
}
}
Run Code Online (Sandbox Code Playgroud)
这是正确的,我在这里遵循最佳做法吗?
我想知道我是否正确设置了初始化器(一个将字符串设置为默认值,一个我可以传入一个字符串)?
我应该super.init()在每个初始化器的末尾调用吗?
我的更具体(带字符串的那个)初始化器是否应该self.init()在最后调用而不是super.init()?
在子类化时,在Swift中设置初始值设定项的正确方法是什么NSObject? - 我该如何调用super init?
这个问题(尽管在目标C中)建议你应该有一个init,你总是调用它,只需在更具体的内容中设置属性:Objective-C Multiple Initialisers
是否可以在NSString不创建NSString的情况下使用NSData对象的内容初始化Swift字符串(而不是)?
我知道我可以在NSString中使用它:
var datastring = NSString(data data: NSData!, encoding encoding: UInt)
Run Code Online (Sandbox Code Playgroud)
但是我如何使用基本的Swift String类型?我认为Swift字符串和NSStrings是可以互换的,我真的必须使用NSString从NSData中获取数据然后将该值赋给Swift字符串吗?
我一直在浏览iOS 7/UIKIT框架,虽然它在美学上看起来很不一样,但是从我能看到的内部真的是相同的SDK.
我的问题是,是否需要包含任何额外的代码才能获得推送的tableviews/views之间的可拖动行为?
将视图推送到UINavigationController时,您现在可以从侧面拖回到上一个控制器,而不是按后退按钮.
这种行为可以在邮件中看到.
如何实现,我是否需要添加任何代码才能将其添加到我的应用程序中?
当像这样使用UIAlertController时:
var alert = UIAlertController(title: "Core Location",
message: "Location Services Disabled!",
preferredStyle: UIAlertControllerStyle.Alert)
alert.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.Default,
handler: nil))
self.navigationController.presentViewController(alert, animated: true,
completion: nil)
Run Code Online (Sandbox Code Playgroud)
我注意到警报视图的解雇似乎是自动完成的.不应该通过委托调用呈现ViewController来解雇呈现的 ViewController吗?
我不想使用故事板,我更倾向于在必要时使用NIB用于UI,我特别不想将它们用于默认模板.
Xcode 5不再有复选框表示你不想使用Storyboard,
有人可以帮忙吗?这真烦人......
我正在构建我的命令行应用程序,并注意到我创建的所有二进制文件都是类型arm64。
但是,macOS 11.4 附带的所有 bin 都是arm64e.
file即在 M1 MacBook 上构建的应用程序上运行显示:
Mach-O 64-bit executable arm64
xxd然而,在同一台计算机上的系统应用程序上运行文件显示:
Mach-O 64-bit executable arm64e
我查看了 Xcode,但看不到如何增强此功能,难道 Xcode 不应该构建吗arm64e?如果是这样我怎样才能达到同样的目的?
编辑:我认为答案可能是,arm64e ABI 不稳定,除了 Apple 之外没有人使用?
我知道这听起来很微不足道,但我对于beta 3/4中缺少iOS应用程序的'空'模板感到非常恼火.
我厌恶故事板方法,(IMO天真地认为它始终是最优雅的方法).
事实上,对于我的大多数用例,Storyboard根本不起作用.
任何人都可以告诉我如何在没有SB的情况下获取空模板并获得一个起点(带窗口的app delegate)? - 或将其他模板之一迁移到非SB.
为segue方法做准备让我感到害怕它太丑了......
提前致谢.
继这个问题之后:Swift数组赋值是否不一致(既不是引用也不是深拷贝)?-
我一直在玩Swift中的传递对象并注意到一些奇怪的结果.
为了阐明的那种行为的我是使用于(之前SWIFT)将是目标C的
举一个我的应用程序(用Obj C编写)的例子,我有一个'通知列表'的概念. - 实际上只是一组自定义对象.
在该App中,我经常将我的全局"通知"数组传递给各种viewControllers,这些viewControllers提供用于更新列表的UI.
当我将全局数组传递给子viewController时,我将它分配给收件人对象中的本地数组变量.然后,只需更新/更改本地数组,这些更改就会反映在rootViewController上的全局数组中.我理解这种行为隐含在Objective C中作为通过引用传递的对象,但这非常方便,我一直试图在Swift中复制这种行为.
然而,当我在Swift中重写我的应用程序时,我已经碰壁了.
我首先尝试将一个Swift数组的字符串 (不是NSMutableArray)从rootViewController传递给子viewController(如上所述).
这是在子视图中传递字符串数组时的行为:
我传入:
[比尔,鲍勃,杰克] 然后将这个传递的数组分配给本地数组进行本地修改,
然后我将字符串"Frank"附加到本地数组
结果是:
本地数组 = [比尔,鲍勃,杰克,弗兰克]
全球阵列 = [比尔,鲍勃,杰克]
对本地数组的更改不会反映回全局数组.- 更改元素时发生相同的结果(不更改数组的长度.)
我还尝试了一个更真实世界的例子 - 将一个自定义'notification'对象的数组传递给子viewController.该SAME结果与发生没有变化到自定义对象的本地分配的阵列被反射到在通过原始的全局阵列.
这种行为对我来说是不可取的,我假设这里的最佳做法是使用委托协议将修改后的数组(或任何对象)传递回父对象,然后手动更新全局数组? - 如果是这样,这会在Objective C样式行为上产生相当多的工作量.
最后我尝试了inout关键字,它有效地让你直接修改传递给目标对象的函数参数var.
更改将反映回全局数组(或对象)但问题是,如果将输入参数分配给局部变量(要在init函数的范围之外进行编辑),对局部变量的更改仍未反映在全局范围内.
我希望上面的内容是有道理的 - 用Swift来扼杀我的生产力.
我是否遗漏了某些事情或预期会出现这种精神分裂症行为?
如果是这样,那么将修改后的数据传回去的最佳做法是什么?