小编fuz*_*oat的帖子

如何使用SKPhysicsBody复制SKSpriteNode?

我很好奇今天遇到的一种情况,当我试图将一个人SKSpriteNode从一个人复制SKScene到另一个人时.在下面的游乐场的输出中,您可以看到复制后都维护linearDamping和/ angularDamping或不维护(它们似乎都回退到默认值)

// PLAYGROUND_SW1.2 - SKSpriteNode Copy
import UIKit
import SpriteKit

// ORIGINAL
let spriteNode = SKSpriteNode()
spriteNode.name = "HAPPY_NODE"
let size = CGSize(width: 55.0, height: 150.0)
let physics = SKPhysicsBody(rectangleOfSize: size)
physics.linearDamping = 0.123
physics.angularDamping = 0.456
spriteNode.physicsBody = physics

// COPY
let spriteCopy = spriteNode.copy() as! SKSpriteNode

// ORIGINAL
spriteNode.name
spriteNode.physicsBody?.linearDamping
spriteNode.physicsBody?.angularDamping
spriteNode.physicsBody?.area

// COPY
spriteCopy.name
spriteCopy.physicsBody?.linearDamping
spriteCopy.physicsBody?.angularDamping
spriteCopy.physicsBody?.area
Run Code Online (Sandbox Code Playgroud)

游乐场输出 在此输入图像描述

我不确定我是否正确地复制了这两个SKSpriteNode并且SKPhysicsBody符合NSCopying如果你看看上面的输出area属性是在复制后维护的,据我所知这是基于创建size时指定的 …

copy sprite-kit skphysicsbody skspritenode swift

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

使用新的 @StateObject 将模型传递给多个视图?

如果您想在多个视图之间传递模型,可以多次使用@StateObject(请参见下面的示例)以便每个视图都可以修改该对象吗?我很欣赏使用 @EnvironmentObject 可以更好地完成此操作,但只是想了解这个新的属性包装器在这种情况下如何工作。

// MARK: - MODEL
class Model: ObservableObject {
   @Published var temperature = 27.5
}
Run Code Online (Sandbox Code Playgroud)

// MARK: - APP.SWIFT
@main
struct SwiftUI_DataFlow_005App: App {
    @ObservedObject var model = Model()
    var body: some Scene {
        WindowGroup {
            ContentView(model: model)
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

// MARK: - CONTENT VIEW
struct ContentView: View {
    @StateObject var model: Model
    var body: some View {
        VStack {
            Text("\(model.temperature)")
            AnotherView(model: model)
        }
    }
}

// MARK: - ANOTHER VIEW
struct AnotherView: View { …
Run Code Online (Sandbox Code Playgroud)

swiftui

6
推荐指数
2
解决办法
6348
查看次数

将字符串对象添加到NSMutableArray?

我正在玩一个基础工具测试(Objective-C),我有一些问题......

#import <Foundation/Foundation.h>

int main (int argc, const char * argv[]) {
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

    int planetLoop;
    NSString *tempString;
    NSMutableArray *planetArray = [[NSMutableArray alloc] init];

    NSLog(@"STRING ARRAY ... Start");
    for(planetLoop=0; planetLoop<10; planetLoop++) {
        tempString = [NSString stringWithFormat: @"Planet_%03d", planetLoop+1];
        NSLog(@"Planet_%03d", planetLoop+1);
        [planetArray addObject:tempString];
    }

    [planetArray release];
    [pool drain];
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

首先,我通常在将对象添加到数组后释放它,但我是否正确地认为我当前所拥有的是正确的,因为"tempString"是一个字符串文字,因此不需要分配或释放?

其次,当我运行它(执行之前)时,我得到以下错误"无法读取未知的加载命令0x80000022"如果这是我的代码的问题?从搜索谷歌看起来它可能是xCode 3.1.2中的一个错误,任何人有任何想法?

最后我做错了什么,想法是用10个字符串"Planet_001"填充一个数组到"Planet_010"

编辑:啊,我明白了,因为"= [NSString"位即

// Autoreleased object
tempString = [NSString stringWithFormat: @"Planet_%03d", planetLoop+1];
// String literal
tempString = @"Planet_"; 
Run Code Online (Sandbox Code Playgroud)

非常感谢,非常感谢-gary-

objective-c foundation

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

并加载NIB/XIB文件?

我有点好奇,我有一个视图控制器类和一个NIB/XIB(都命名为"MapViewController")如果我执行以下操作,它会加载具有匹配名称的NIB.

-(id)init {
    self = [super initWithNibName:@"MapViewController" bundle:nil];
    if(self) {
        do things ...
    }
    return self;
}
Run Code Online (Sandbox Code Playgroud)

另一方面,我只是指定[super init] Xcode只是寻找与控制器名称相匹配的NIB,这是如何工作的?

-(id)init {
    self = [super init];
    if(self) {
        do things ...
    }
    return self;
}
Run Code Online (Sandbox Code Playgroud)

欢呼加里.

iphone cocoa-touch objective-c

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

iPhone4 UI元素大小以像素为单位?

有谁知道iPhone4的各种屏幕尺寸在哪里?我已经检查了MobileHIG,但我可以找到所有可以找到旧iPhone3G的参考资料.我应该假设所有以前的值都加倍(即StatusBar = 40像素),或者是否有更准确的插图(如下面隐藏在其他地方的那个?

替代文字

干杯加里

iphone user-interface cocoa-touch

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

轻微放大MKCoordinateRegion?

我正在缩放MKMapView以适应一组引脚的边界区域,但是当显示引脚时,我注意到变焦可以理想地做得更紧.我提出的解决方案是让区域增量略小一些:

// SMALL ZOOM
region.span.latitudeDelta = (upper.latitude - lower.latitude) * 0.9;
region.span.longitudeDelta = (upper.longitude - lower.longitude) * 0.9;
Run Code Online (Sandbox Code Playgroud)

但是我注意到精细调整似乎并没有转化为小的变焦增加,是否有某种形式的缩放对齐?真的很小的值可以工作,就像真正的大值一样,但只是将区域大小调整几个百分点似乎不适用于视图几乎总是跳跃/放大到剪切我的引脚.

编辑:

快速测试显示该地区不同比例因子的结果:

 //                                                             SCALE FACTOR
 //                                                                  V
 region.span.latitudeDelta  =   (upper.latitude - lower.latitude) * 0.9;
 region.span.longitudeDelta = (upper.longitude - lower.longitude) * 0.9;
Run Code Online (Sandbox Code Playgroud)

结果如下:

  • x0.5区域太小,屏幕上有一些注释
  • x0.6与使用1.0相同
  • x0.7与使用1.0相同
  • x0.8与使用1.0相同
  • x0.9与使用1.0相同
  • x1.0原装适合
  • x1.1区域太大,屏幕上的注释太小

我的观点是,非常小的调整(例如0.6到0.9)似乎没有任何区别.

iphone cocoa-touch objective-c mapkit mkmapview

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

MKPinAnnotationView图像偏移?

有谁知道为什么用于MKPinAnnotationView的图像应该略微偏移(向上和向右)我正在使用的代码是:

pinView = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:pinView_ID];
pinView.image = [UIImage imageNamed: @"TEST_Small.png"];
// RedCircleImage = 40px x 40px 72dpi PNG
// GreenDotImage = 2px x 2px 72dpi PNG
Run Code Online (Sandbox Code Playgroud)

替代文字

代码没有变化只是改变了所用图像的文件名,一个图像是"两个红色圆圈,中间有一个黑点",另一个是"小绿点",我添加了淡蓝色Photoshop中的线条可帮助显示绿点的位置.

我检查了centerOffset属性并将其正确设置为0,0

任何想法都会受到欢迎.

iphone cocoa-touch objective-c

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

当view属性没有设置时,loadView多次调用?

我刚刚遇到了一些我以前从未见过的东西,我想我会在这里要求核实原因.我有一个UIController,他的视图是以编程方式定义的,我今天注意到当我从其loadView中注释掉代码(以测试其他东西)时,loadView和viewDidLoad都被调用了四次.我的想法是因为我没有设置视图属性iOS尝试多次加载视图,虽然我仍然有点好奇,如果这也是为什么viewDidLoad也被调用.

- (void)loadView {
    NSLog(@"%s", __PRETTY_FUNCTION__);

    // MAP VIEW
    // MKMapView *tempMapView = [[MKMapView alloc] init];
    // [tempMapView setDelegate:self];
    // [self setView:tempMapView];
    // [self setCustomMapView:tempMapView];
    // [tempMapView release];
}
Run Code Online (Sandbox Code Playgroud)

控制台输出:

2011-02-02 14:10:00.194 Xrails[19501:307] -[MapController loadView]
2011-02-02 14:10:00.209 Xrails[19501:307] -[MapController viewDidLoad]

2011-02-02 14:10:00.212 Xrails[19501:307] -[MapController loadView]
2011-02-02 14:10:00.226 Xrails[19501:307] -[MapController viewDidLoad]

2011-02-02 14:10:00.229 Xrails[19501:307] -[MapController loadView]
2011-02-02 14:10:00.243 Xrails[19501:307] -[MapController viewDidLoad]

2011-02-02 14:10:00.246 Xrails[19501:307] -[MapController loadView]
2011-02-02 14:10:00.259 Xrails[19501:307] -[MapController viewDidLoad]
Run Code Online (Sandbox Code Playgroud)

iphone cocoa-touch objective-c

5
推荐指数
2
解决办法
3567
查看次数

避免自动释放的物体,良好做法或过度杀伤?

我对以下内容感到好奇,当我编写代码时,我总是尝试通过坚持使用非自动释放的对象来管理内存.我知道这意味着对象并没有在游泳池中闲逛,但我只是好奇,如果一般这样做是好的做法还是仅仅是矫枉过正?

// User Managed Memory
NSSet *buttonSizes = [[NSSet alloc] initWithObjects:@"Go", @"Going", @"Gone", nil];
[barItemLeft setPossibleTitles:buttonSizes];
[barItemRight setPossibleTitles:buttonSizes];
[buttonSizes release];
Run Code Online (Sandbox Code Playgroud)

.

// Autoreleased Memory
NSSet *buttonSizes = [NSSet setWithObjects:@"Go", @"Going", @"Gone", nil];
[barItemLeft setPossibleTitles:buttonSizes];
[barItemRight setPossibleTitles:buttonSizes];
Run Code Online (Sandbox Code Playgroud)

iphone cocoa-touch memory-management objective-c

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

为另一个对象指定@selector方法?

快问,有没有办法指定@selector是另一个对象的方法.目前我通过使用本地方法调用远程方法来捏造一个解决方案,但它感觉很笨拙.

[NSTimer scheduledTimerWithTimeInterval:10 target:self selector:@selector(timerLocation) userInfo:nil repeats:YES]];
Run Code Online (Sandbox Code Playgroud)

.

- (void)timerLocation {
    [[self dataModel] startUpdatingLocation];
}
Run Code Online (Sandbox Code Playgroud)

iphone cocoa-touch objective-c

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