好吧,这个让我尖叫到墙上......所以请耐心等待我.
我开始使用Xcode中的SpriteKit模板编写一个简单的游戏.
我将两个PNG添加到一个名为的文件夹中Stage01.atlas并将其拖动到项目中.不记得我选择了哪个选项,因为它在项目导航器中显示为蓝色文件夹图标(可能是因为它有扩展名?).
接下来,我使用了几个sprite来实例化
[[SKSpriteNode alloc] initWithImageNamed:@"My_Image_Name_Without_The_@2x_Or_Extension"];
Run Code Online (Sandbox Code Playgroud)
起初它没有用,因为我忘了在构建设置中启用纹理图集.然后,它就像一个魅力,但......
接下来,我在地图集中添加了第三个PNG来显示一种新的精灵.
新的精灵无处可见.
我尝试全新安装:从设备中删除应用程序,清理,构建.
现在所有精灵都呈现为白色四边形,边框较大,内部有一个大的红色"X".我也得到控制台消息:
SKTexture: Error loading image resource: "My_Image_Name_Without_The_@2x_Or_Extension"
Run Code Online (Sandbox Code Playgroud)
我尝试删除.atlas文件夹并重新添加它,两者都是"为任何添加的文件夹创建组"和"为任何添加的文件夹创建文件夹引用"(这可能导致资源被放置在子文件夹而不是bundle root中,所以它通常对UIImage等很重要,但无济于事.
我用这个替换了精灵创建代码:
SKTexture* texture = [SKTexture textureWithImageNamed:name];
SKSpriteNode* body = [[SKSpriteNode alloc] initWithTexture:texture];
Run Code Online (Sandbox Code Playgroud)
...并放置一个断点来查看纹理是否正确nil.事实并非如此.
那么,是什么给出的?
旁注:与模板捆绑在一起的"太空飞船"纹理渲染得很好.
旁注2:有人创建标签"spritekit"(SO不允许我使用它'因为它已经存在'但它没有作为建议提出).
我正在尝试实现一个集合视图,其中每个单元格具有可变数量的UIButton实例,端到端水平放置.
因为按钮的数量是动态的,所以我在运行时实例化按钮并以编程方式添加自动布局约束(第一次尝试这个).
这是我的代码:
class MyCustomCell: UICollectionViewCell
{
var buttonTitles:[String]?
var buttons = [UIButton]()
override func didMoveToSuperview()
{
super.didMoveToSuperview()
guard let titles = buttonTitles else {
return
}
for button in buttons {
button.removeFromSuperview()
}
buttons.removeAll()
self.translatesAutoresizingMaskIntoConstraints = false
// FIRST LOOP: CREATE/ADD BUTTONS:
for (index, title) in titles.enumerate(){
let button = UIButton(type: UIButtonType.Custom)
button.translatesAutoresizingMaskIntoConstraints = false
button.setTitle(title, forState: .Normal)
button.tag = index
addSubview(button)
buttons.append(button)
}
// SECOND LOOP: ADD CONSTRAINTS:
for (index, button) in buttons.enumerate(){
// Vertical Constaints (common to …Run Code Online (Sandbox Code Playgroud) 这是我在弃用UIAlertView之前使用的代码:
//OLD UIALERTVIEW
- (void)applicationDidBecomeActive:(UIApplication *)application {
// Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
// check to see if newer version exists to alert the user
BOOL updateAvailable = NO;
NSDictionary *updateDictionary = [NSDictionary dictionaryWithContentsOfURL:[NSURL URLWithString:@"PLIST_URL_HERE"]];
NSArray *items = [updateDictionary objectForKey:@"items"];
NSDictionary *itemDict = [items lastObject];
NSDictionary *metaData = [itemDict objectForKey:@"metadata"];
NSString *newversion = [metaData valueForKey:@"bundle-version"];
NSString *currentversion …Run Code Online (Sandbox Code Playgroud) class MyClass
{
enum MyEnum {
case FirstCase
case SecondCase(Int)
case ThirdCase
}
var state:MyEnum!
func myMethod ()
{
if state! == MyEnum.FirstCase {
// Do something
}
}
}
Run Code Online (Sandbox Code Playgroud)
我得到编译器错误指向if语句::
二进制运算符'=='不能应用于两个'MyClass.MyEnum'操作数
如果相反,我使用一个switch声明,没有问题:
switch state! {
// Also, why do I need `!` if state is already an
// implicitly unwrapped optional? Is it because optionals also
// are internally enums, and the compiler gets confused?
case .FirstCase:
// do something...
default:
// (do nothing)
break …Run Code Online (Sandbox Code Playgroud) 我正在尝试测试类型数组是否[Any]包含特定类型的值(比方说Int).
我知道Swift不知道如何比较一个Int和任意类型的值,我想这就是在自动完成模板中表达的内容:
contains(predicate: (protocol<>) throws -> Bool)
所以我尝试了这段代码:
let intValue:Int = 5 // for example
let isContained = myArrayOfAny.contains({ element in
return ((element as? Int) == intValue)
})
Run Code Online (Sandbox Code Playgroud)
......它编译(无法确定它是否有效); 但仍然无法做出部分的正面或反面predicate: (protocol<>).这是什么意思?文档SequenceType是非常神秘的:
contains(_: (Self.Generator.Element) throws -> Bool) rethrows -> Bool
Default Implementation
Return true iff an element in self satisfies predicate.
Declaration
@warn_unused_result func contains(@noescape _ predicate: (Self.Generator.Element) throws -> Bool) rethrows -> Bool
Run Code Online (Sandbox Code Playgroud)
编辑:我很困惑,因为我所见过的所有搜索结果都只是采用了测试包含值的contains()方法Array,例如:
if …Run Code Online (Sandbox Code Playgroud) 我在C中尝试了一些基本的数据结构.我很久以后就回到了C语言.这是我的简单struct:
typedef struct
{
int data;
LLNode *next; //Error: unknown type name 'LLNode'
}LLNode;
Run Code Online (Sandbox Code Playgroud)
但它给出了编译错误,如上所示.是因为编译时编译struct器不知道存在LLNode吗?这意味着我必须首先声明LLNode之前struct.是这样的吗?如果是的话我该怎么做呢?
UITableViewController当用户点击其中一个表格视图单元格时,我的基于故事板的子类将另一个视图控制器推送到导航中.
我使用segue来实现这一点,而不是以编程方式进行pushViewController(:animated:).
我遇到的问题是我的表视图单元格一直保持高亮显示(浅灰色),即使在弹出视图控制器之后(再次使用'展开'segue).清除它的唯一方法是打电话tableView.reloadData().
我试过了:
设置:
self.clearsSelectionOnViewWillAppear = true
Run Code Online (Sandbox Code Playgroud)
in viewDidLoad()(不应该是必需的,因为它已经是默认值:模板代码已self.clearsSelectionOnViewWillAppear = false注释掉,并建议取消注释以覆盖默认功能).
也:
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
if let indexPath = tableView.indexPathForSelectedRow {
tableView.deselectRow(at: indexPath, animated: true)
}
}
Run Code Online (Sandbox Code Playgroud)
......无济于事
编辑:原来viewDidAppear()是不叫上导航的流行,只是被添加到视图层次结构(例如,后addSubview()).放置此代码viewWillAppear() 可以解决问题.但是我在这篇文章末尾的问题仍然存在.
我也试过实现这个方法:
override func tableView(_ tableView: UITableView, didDeselectRowAt indexPath: IndexPath) {
tableView.deselectRow(at: indexPath, animated: true)
}
Run Code Online (Sandbox Code Playgroud)
...但它没有被调用(可能是因为segue?)
成功取消单元格的唯一事情就是调用:
tableView.deselectRow(at: indexPath, animated: true)
Run Code Online (Sandbox Code Playgroud)
...从内 …
在这里,我只是得到数组计数和使用for循环但let arr = arrayAdaptor[i]在完成我的数组计数后在此行崩溃不知道为什么它崩溃任何人都可以帮助我如何解决这个问题
var arrayAdaptor = [Struct_Row_Rating]()
for i in 0...arrayAdaptor.count {
let arr = arrayAdaptor[i]
let number = arr.row
let row = number + 1
dict.updateValue("\(arr.rating)", forKey: "\(row)")
print(dict)
}
struct Struct_Row_Rating {
var row: Int
var rating: Double
init(row: Int , rating: Double) {
self.row = row
self.rating = rating
}}
Run Code Online (Sandbox Code Playgroud) 我发现的所有解释似乎都说同样的事情.我无法弄清楚为什么这不起作用.
var linePath = UIBezierPath()
linePath.move(to: CGPoint(x: 50, y: 50))
linePath.addLine(to: CGPoint(x: 100, y: 100))
var pattern : [CGFloat] = [10.0, 10.0]
linePath.setLineDash(pattern, count: pattern.count, phase: 0)
linePath.lineWidth = 10
linePath.lineCapStyle = .round
let shape = SKShapeNode()
shape.path = linePath.cgPath
shape.strokeColor = UIColor.white
self.addChild(shape)
Run Code Online (Sandbox Code Playgroud)
此代码成功绘制一条线但shape不继承虚线属性linePath,甚至包括宽度.有任何想法吗?
我需要通过数组元素的某些条件来过滤数组,但我需要获取通过测试的元素的索引,而不是元素本身。
例如:给定一个数组Bool,我想将其转换为一个Int仅包含原始数组元素索引的数组true。
我可以这样做:
// INPUT array:
let flags = [true, false, true, false]
// OUTPUT array:
var trueIndices = [Int]()
for (index, value) in flags.enumerated() where value == true {
trueIndices.append(index)
}
Run Code Online (Sandbox Code Playgroud)
......但它根本不是“迅速” 。
有更优雅的方式吗?类似于filter(),但返回索引而不是元素。
swift ×7
ios ×5
sprite-kit ×2
arrays ×1
autolayout ×1
c ×1
declaration ×1
enumeration ×1
enums ×1
if-statement ×1
objective-c ×1
skshapenode ×1
struct ×1
structure ×1
uitableview ×1