小编gbk*_*gbk的帖子

MKMapView显示错误保存的区域

当我的iPhone应用程序关闭时,我将地图区域保存为用户默认值:

MKCoordinateRegion region = mapView.region;
[[NSUserDefaults standardUserDefaults] setDouble:region.center.latitude forKey:@"map.location.center.latitude"];
[[NSUserDefaults standardUserDefaults] setDouble:region.center.longitude forKey:@"map.location.center.longitude"];
[[NSUserDefaults standardUserDefaults] setDouble:region.span.latitudeDelta forKey:@"map.location.span.latitude"];
[[NSUserDefaults standardUserDefaults] setDouble:region.span.longitudeDelta forKey:@"map.location.span.longitude"];
Run Code Online (Sandbox Code Playgroud)

当应用程序再次启动时,Ш以相同的方式读取这些值,以便用户可以看到与上次完全相同的地图视图:

MKCoordinateRegion region;

region.center.latitude  = [[NSUserDefaults standardUserDefaults] doubleForKey:@"map.location.center.latitude"];
region.center.longitude = [[NSUserDefaults standardUserDefaults] doubleForKey:@"map.location.center.longitude"];
region.span.latitudeDelta  = [[NSUserDefaults standardUserDefaults] doubleForKey:@"map.location.span.latitude"];
region.span.longitudeDelta = [[NSUserDefaults standardUserDefaults] doubleForKey:@"map.location.span.longitude"];

NSLog([NSString stringWithFormat:@"Region read  : %f %f %f %f", region.center.latitude, region.center.longitude, region.span.latitudeDelta, region.span.longitudeDelta]);

[mapView setRegion:region];

NSLog([NSString stringWithFormat:@"Region on map: %f %f %f %f", mapView.region.center.latitude, mapView.region.center.longitude, mapView.region.span.latitudeDelta, mapView.region.span.longitudeDelta]);
Run Code Online (Sandbox Code Playgroud)

我从用户默认值中读取的区域(毫不奇怪)与保存时完全相同.请注意,保存的内容直接来自地图,因此不会以任何方式进行转换.我用setRegion:方法将它设置在地图上,但后来却与众不同!

示例结果:

Region read  : 50.241110 8.891555 0.035683 …
Run Code Online (Sandbox Code Playgroud)

objective-c nsuserdefaults mkcoordinateregion mkmapview ios

15
推荐指数
2
解决办法
7105
查看次数

从*.FBX文件中读取和显示动画

我想从fbx文件中读取3d模型并openGL es 2.0在iPhone上的引擎内显示它(不使用Unity),我也想显示读取3d对象的动画.

我如何从fbx文件中获取动画?

目前我能够获得姿势名称列表,据我所知,它带有变换矩阵,图层,堆栈,图层和许多曲线中的姿势的完整列表.

如何将所有信息组合起来以显示正确的动画?

我也尝试解析其中的一些信息TakeInfo,但结果有点奇怪,例如:

    FbxTakeInfo *ltakeInfo  =  pScene->GetTakeInfo(lAnimStack->GetName());
    FbxTime start = ltakeInfo->mLocalTimeSpan.GetStart();
    FbxTime end = ltakeInfo->mLocalTimeSpan.GetStop();

    self.startTime = start.GetSecondDouble();
    self.endTime = end.GetSecondDouble();
Run Code Online (Sandbox Code Playgroud)

在这里我得到start = 0end = 0.014为每个解析的图层,所以我猜这是不正确的(fbx我要显示的文件包含1个网格与简单的5秒持续时间动画).


更新

经过几个小时的调查后,我接下来的事情:

作为参考,这是我想要显示的测试obj的结构:

在此输入图像描述

在这里你可以看到很多骨头(更具体 - 19)我能够得到(如上所述)列表中的19个动画obj(如骨骼/ obj的名称)和每组151帧内的19组曲线(具有帧速率) 30正好5秒的动画 - 30*5 = 150 + 1最后一个单位矩阵).

如果我尝试逐个使用每个曲线组到我的网格(我只能解析1个网格)我看到网格的不同部分的动画应用于所有网格(例如垂直旋转或水平平移),所以我认为这个每组中的曲线应该精确地应用于特定骨骼,因此我将获得我的网格动画.问题是我不知道如何仅为选定的骨骼顶点部分设置动画.

现在的问题是如何应用这个所有动画分为将特定于骨的组分离到整个obj(因为我只有一个网格)?

如何从包含所有曲线组的列表中为每个帧获得1个全局曲线列表?


UPDATE2

感谢@codetiger的建议,我遵循评论中提供的链接中的指令,并且通过该技术,我能够检索具有开始和结束时间以及所需变换的骨骼特定垫片列表,但这几乎与我之前使用曲线相同 - 与曲线的唯一区别我应该从9条曲线创建mat(对于xyz进行平移/缩放/旋转)而不是使用完整矩阵,但问题仍然存在 - 如何将它们组合在1个全局矩阵中?

我使用的代码(找到几个链接):

FbxNode* modelNode = _fbxScene->GetRootNode();
FbxAMatrix geometryTransform = GetGeometryTransformation(modelNode);
for (unsigned …
Run Code Online (Sandbox Code Playgroud)

animation objective-c++ ios fbx opengl-es-2.0

9
推荐指数
1
解决办法
1339
查看次数

无法在项目中看到JSON文件

使用VS 2013,C#

我想在我的项目中使用JSON文件.使用下一个代码(如MS中的示例项目):

        Uri dataUri = new Uri("ms-appx:///DataModel/MyData.json");
        StorageFile fileToRequest = await StorageFile.GetFileFromApplicationUriAsync(dataUri);
        string jsonText = await FileIO.ReadTextAsync(fileToRequest);
        JsonObject jsonO = JsonObject.Parse(jsonText);
        JsonArray jsonA = jsonO["Events"].GetArray();
Run Code Online (Sandbox Code Playgroud)

结果得到了这个:

在此输入图像描述

和下一步 - 找不到异常文件,但它存在

在此输入图像描述 在此输入图像描述

此外,如果使用VS的示例项目启动相同的代码 - 一切正常.示例项目代码:

        Uri dataUri = new Uri("ms-appx:///DataModel/SampleData.json");
        StorageFile file = await StorageFile.GetFileFromApplicationUriAsync(dataUri);
        string jsonText = await FileIO.ReadTextAsync(file);
        JsonObject jsonObject = JsonObject.Parse(jsonText);
        JsonArray jsonArray = jsonObject["Groups"].GetArray();
Run Code Online (Sandbox Code Playgroud)

调试此代码得到:

在此输入图像描述

所以问题 - 为什么我有异常FileNotFound,为什么这个文件对我的项目是不可见的.

.net c# json visual-studio-2013

8
推荐指数
1
解决办法
1839
查看次数

如何将字符串转换为键

尝试实现我的程序的按键组合当前可以检测所需的keypressed(在这篇文章中描述了如何)但只在代码中预定义,但我想在condig文件中存储设置然后读取它并使用如果按下.

现在可以存储它,并作为字符串读取 - 当前尝试Keys使用下一个代码将readed字符串转换为:

存储在配置文件中:

<add key="open" value="ControlKey,N"
<add key="close" value="ControlKey,Q" />
<add key="clear" value="ControlKey,D" />
<add key="settings" value="ControlKey,S" />
<add key="colorKey" value="ControlKey,K" />
<add key="fontKey" value="ShiftKey,T" />
<add key="defaultKey" value="ControlKey,P" />
Run Code Online (Sandbox Code Playgroud)

并使用它

    private void textBox1_KeyDown(object sender, KeyEventArgs e)
    {
        TypeConverter converter = TypeDescriptor.GetConverter(typeof(Keys));
        string[] keyValueTemp;

        keyValueTemp = cm.GetValueString("open").ToString().Split(',');
        string key1 = keyValueTemp[0];
        string key2 = keyValueTemp[1];

        Keys keys1 = (Keys)converter.ConvertFromString(key1);
        Keys keys2 = (Keys)converter.ConvertFromString(key2);

        if (ModifierKeys == keys1 && e.KeyCode == keys2)
        {
            string keyPressed …
Run Code Online (Sandbox Code Playgroud)

.net c# key typeconverter winforms

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

如何以正确的方式使用委托/了解委托

使用 - C#(.Net Framework 4.5,Visual Studio 2012)

我试着理解像代表这样的主题,目前我有几点,必须为我澄清.我在互联网上发现了很多不同的信息来描述如何使用它,但是对我来说理解这个主题有点复杂.

据我所知,我必须做一些使用委托的事情:

  • 创建一些实体用于它(需要创建一些委托)
  • 声明委托类型
  • 创建一些我调用委托的方法
  • 在主类调用委托与使用实体的必需方法(从第一点)

所有描述如下所示

理解分流

问题 - 我是否正确理解了所有或者我错了 - 请澄清一下.

另外一个关于DELEGATE的问题 - 哪里更好地将代码放在DELEGATE中 - 在Console C#应用程序中我可以在任何使用过的Namespace的地方创建它 - 我可以在下面看到.

放置dalagete

但也许有一些建议/要求不仅为控制台应用程序而且为WinForms,WPF等放置委托.

这个主题对我来说是新的,我花了一天时间来理解它,但仍然有点(或更多)与此相混淆,最后创建这篇文章以获得更好和清晰的理解.认为这是非常强大的东西.

编辑

namespace SimpleCSharpApp
{
   delegate void myDelagate ();
}
Run Code Online (Sandbox Code Playgroud)

c# delegates event-handling visual-studio

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

装配的类型 - 最重要的是什么

什么是静态和动态组装之间的区别.只有这样一个事实,一个可以从文件加载,另一个可以在程序运行期间创建?

.net c# assemblies

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

WKWebView,获取所有cookie

我想从WKWebView获取所有cookie.为什么?我已经启动了一个使用基于Web的身份验证的项目.因此,我应该拦截cookie以确保用户已登录并用于其他目的.另一种情况 - 想象一下,如果用户登录,而不是"杀死"应用程序 - 由于存储此cookie会话的一些延迟将丢失:(.

问题似乎是cookie被缓存而不是立即保存到文件中.

(@Kemenaran从这里 - 下面的第5页)

我试图抓住他们的地方 -

webView:decidePolicyForNavigationResponse:decisionHandler:,

func webView(webView: WKWebView, decidePolicyForNavigationResponse navigationResponse: WKNavigationResponse, decisionHandler: (WKNavigationResponsePolicy) -> Void) {

  if let httpResponse = navigationResponse.response as? NSHTTPURLResponse {
    if let headers = httpResponse.allHeaderFields as? [String: String], url = httpResponse.URL {
      let cookies = NSHTTPCookie.cookiesWithResponseHeaderFields(headers, forURL: url {
      for cookie in cookies {
            NSHTTPCookieStorage.shared.set(cookie)
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

但并非所有请求都是导航,因此跳过一个cookie(在我的情况下),请参阅下面的详细信息

在此输入图像描述

关于我试过的其他选项的几句话......

  1. 是的,我知道从iOS 11开始,我们可以在这里WKHTTPCookieStore提到.但我的项目应该支持iOS 9+

在此输入图像描述

  1. 我100%肯定,在登录后5-10秒,所需的cookie将保存到NSHttpCookieStorage(至少我几天的所有测试都确认)

  2. 我尝试使用提供的观察者NSHTTPCookieManagerCookiesChangedNotification,但它只为内部的cookie提供回调webView:decidePolicyForNavigationResponse:decisionHandler

  3. 我也尝试使用这里提到的一些JS来获取cookie …

nshttpcookie ios swift wkwebview nshttpcookiestorage

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

继承初学者

我刚刚开始学习java,所以现在我读到了继承这种可能性,所以尝试创建必须创建对象框的类.并使用继承实现新属性来创建对象.我尝试将每个类放在单独的文件中,因此在创建类之后,尝试使用它

public static void main(String[] args)
Run Code Online (Sandbox Code Playgroud)

所以类继承:

 public class Inheritance {
double width;
double height;
double depth;
Inheritance (Inheritance object){
    width = object.width;
    height = object.height;
    depth = object.depth;
}
Inheritance ( double w, double h, double d){
    width = w;
    height = h;
    depth = d;
}
Inheritance (){
    width = -1;
    height = -1;
    depth = -1;
}
Inheritance (double len){
    width=height=depth=len;
}
double volumeBox (){
    return width*height*depth;
}
class BoxWeight extends Inheritance {
    double weight;
    BoxWeight (double …
Run Code Online (Sandbox Code Playgroud)

java inheritance

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

BLE背景重新连接

我想在设备被用户移出/终止后再重新连接到BLE设备,或者在后台模式下重新连接.

我知道这是可能的: - 用描述看这个问题

问题 - centralManager如果应用程序终止,我如何设置在后台模式下自动重新连接到外围设备?有人可以逐步描述如何完成它吗?

关于当前实施的几点说法:

我使用以下选项创建centralManager:

self.centralManager = [[CBCentralManager alloc] initWithDelegate:self queue:nil  options:@{
                                                                                               CBCentralManagerOptionRestoreIdentifierKey: @"myCentralManagerIdentifier",
                                                                                               CBCentralManagerRestoredStatePeripheralsKey : @YES,
                                                                                               CBCentralManagerRestoredStateScanServicesKey : @YES,
                                                                                               CBCentralManagerRestoredStateScanOptionsKey : @YES
                                                                                               }];
Run Code Online (Sandbox Code Playgroud)

之后我开始扫描BLE设备

[self.centralManager scanForPeripheralsWithServices:[self discoverableCharacteristics] options:nil];
Run Code Online (Sandbox Code Playgroud)

- (void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary *)advertisementData RSSI:(NSNumber *)RSSI我连接到外围设备:

    NSString *localName = [advertisementData objectForKey:CBAdvertisementDataLocalNameKey];
    [self.centralManager stopScan];
    peripheral.delegate = self;
    [self.centralManager connectPeripheral:peripheral options: @{
                                                                CBConnectPeripheralOptionNotifyOnNotificationKey : @YES
                                                                }];
Run Code Online (Sandbox Code Playgroud)

之后我可以发现服务和特征 - 一切看起来都不错.当我发现特征和读/写数据时cancelPeripheralConnection

在didDisconnect中我重新连接到设备

- (void)centralManager:(CBCentralManager *)central didDisconnectPeripheral:(CBPeripheral *)peripheral error:(nullable NSError *)error
{
    [central connectPeripheral:peripheral options:nil]; …
Run Code Online (Sandbox Code Playgroud)

background objective-c ios bluetooth-lowenergy cbcentralmanager

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

Swift 包管理器本地化

我想知道本地化如何与 swift 包一起使用。我看到了 WWDC20/10169 视频 - Swift 包:资源和本地化。我正在尝试在我自己的项目中做同样的事情。

如果我做相同的配置(如在 WWDC 视频上)并添加.environment(\.locale, Locale(identifier: "es"))View预览,它就可以工作(但仅在 sp 内部测试时)。

当我尝试在实际应用程序中使用本地化资源时,问题就开始了。这个过程非常简单 - 我只是使用一个视图,其中包含来自应用程序包中的本地化字符串。出于测试目的,我使用特定的语言环境(方案设置)启动我的应用程序 - 结果,我总是得到en翻译。

我的清单:

let package = Package(
  name: "MyLibrary",
  defaultLocalization: "en",
  platforms: [
    .iOS(.v14),
  ],
  products: [
    .library(
      name: "MyLibrary",
      targets: ["MyLibrary"]),
  ],
  dependencies: [
  ],
  targets: [
    .target(
      name: "MyLibrary",
      dependencies: [],
      path: "Sources"
    ),
    .testTarget(
      name: "MyLibraryTests",
      dependencies: ["MyLibrary"]),
  ]
)
Run Code Online (Sandbox Code Playgroud)

包的结构:

包的结构

resource_bundle_accessor生成得很好 - 所以我可以访问Bundle.module,实际上我可以按预期列出所有本地化 -enes. …

localization swift swift-package-manager

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