小编ric*_*ter的帖子

PHImageManager是否以像素或点大小返回2x和3x屏幕的图像?

我正在通过PHImageManager从相机胶卷加载图像,但返回的图像不是视网膜分辨率.我是否必须自己提供2倍和3倍的倍增器,或者我有什么问题吗?

这是我的代码:

class ReviewableImageView: UIImageView {

    ...unrelated code

    imageRequestOptions = PHImageRequestOptions()
    imageRequestOptions.deliveryMode = .HighQualityFormat
    imageRequestOptions.resizeMode = .Exact

    ...unrelated code

    self.contentMode = .ScaleAspectFit
    self.backgroundColor = UIColor.clearColor()
    self.userInteractionEnabled = true

    ... unrelated code

    func reloadImage(){
        let imageManager = PHCachingImageManager()//PHImageManager()

        imageManager.requestImageForAsset(self.imageAsset,
            targetSize: self.frame.size,
            contentMode: .AspectFit,
            options: imageRequestOptions,
            resultHandler: { (image: UIImage!, info: [NSObject : AnyObject]!) in
                self.image = image
        })
    }

}
Run Code Online (Sandbox Code Playgroud)

ios swift photokit

7
推荐指数
2
解决办法
665
查看次数

如何找到具有相同捆绑标识符的多个应用?

有没有人知道找到(在文件系统中)具有给定包标识符的每个应用程序的好方法?NSWorkspace和启动服务允许您按包标识符查找应用程序,但只返回单个结果.我怀疑Spotlight(NSMetadataQuery)可能有所帮助,但我对它的API有点不清楚,所以我不确定是否有合适的密钥.

有一个命令行lsregister工具(在LaunchServices.framework内部),可以告诉它(重新)注册系统上的所有内容,然后转储它所知道的所有内容的报告.依赖于它似乎不太理想,因为它没有文档,解析它的输出可能是一个痛苦.

(背景:我正在构建一个用于游戏修改的应用程序,并希望提供用于从支持的游戏的简短列表中快速选择的UI,而不是要求用户在Open面板中挖掘整个文件系统.但是,我希望它相当可能是用户安装了多个游戏副本:发行版和测试版,用于修改的额外副本等)

macos cocoa launch-services

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

在swift中访问固定长度C数组的元素

我正在尝试将一些C代码转换为swift.(为什么? - 如果你问的话,在OS-X中使用CoreMIDI)

C代码是这样的

void printPacketInfo(const MIDIPacket* packet) {
   int i;
   for (i=0; i<packet->length; i++) {
      printf("%d ", packet->data[i]);
   }
 }
Run Code Online (Sandbox Code Playgroud)

而MIDIPacket的定义是这样的

struct MIDIPacket
 {
    MIDITimeStamp           timeStamp;
    UInt16                  length;
    Byte                    data[256];
 };
Run Code Online (Sandbox Code Playgroud)

我的斯威夫特是这样的

func printPacketInfo(packet: UnsafeMutablePointer<MIDIPacket>){
    // print some things
    print("length", packet.memory.length)
    print("time", packet.memory.timeStamp)
    print("data[0]", packet.memory.data.1)
    for i in 0 ..< packet.memory.length {
      print("data", i, packet.memory.data[i])
    }
  }
Run Code Online (Sandbox Code Playgroud)

但这会产生编译错误

错误:类型'(UInt8,UInt8,..剪切.. UInt8,UInt8,UInt8)'没有下标成员

那么如何取消引用固定大小数组的第i个元素呢?

coremidi swift

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

如何使用Swift 3选择器?

到目前为止,我已经有了这个代码

if UIScreen.instancesRespondToSelector(Selector("scale")) {
  UIGraphicsBeginImageContextWithOptions(size, false, UIScreen.mainScreen().scale);
}else{...}
Run Code Online (Sandbox Code Playgroud)

我没有写这个代码,所以我不确定它是什么,但看起来他们想要验证UIScreen.mainScreen()实际上可以有变量.scale(?).

在查看时.scale,它看起来像iOS 4.0以来一直可用.由于我们支持iOS 7,这不是必需的,对吧?

无论如何,这不是当前的问题.由于Xcode 7.3向Swift 3发出了这些新的选择器实例或诸如此类的东西,我现在有数百个警告.

Xcode要我改变这个:

Selector("scale")

#selector(NSDecimalNumberBehaviors.scale)

到现在为止,我已经改变了所有其他选择已经合乎逻辑的,如"改变Selector("hello")#selector(MyClass.hello),但是这NSDecimal..听起来有点激烈.我可以信任的Xcode选择正确的选择?我找不到NSDecimalNumberBehaviors任何地方连接到UIScreen.scale ..如果我键入#selector(UIScreen.scale)我得到一个错误..

我唯一知道的是,如果我CMD +点击scale这里:NSDecimalNumberBehaviors.scale在这里:UIScreen.mainScreen().scale我最终在不同的地方..

ios swift swift2.2

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

如何使用ARKit将SCNNode的方向更改为相机

下面的代码将SCNPlane放置到触摸点上,但是平面朝向(旋转)到应用程序启动时手机所处的位置.理想情况下,我希望将节点定位到物理墙或相机的当前方向.如何用ARKit完成?

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
    guard let touch = touches.first else {return}
    let result = sceneView.hitTest(touch.location(in: sceneView), types: [ARHitTestResult.ResultType.featurePoint])
    guard let hitResult = result.last else {return}
    let hitTransform = SCNMatrix4.init(hitResult.worldTransform)

    let hitVector = SCNVector3Make(hitTransform.m41, hitTransform.m42, hitTransform.m43)
    createPlane(position: hitVector)
}

func createPlane(position: SCNVector3) {

    let background = SCNNode()
    background.geometry = SCNPlane.init(width: 0.12, height: 0.10) // better set its size
    background.geometry?.firstMaterial?.diffuse.contents = "odinBW2.jpeg"
    background.position = position

    sceneView.scene.rootNode.addChildNode(background)

}
Run Code Online (Sandbox Code Playgroud)

ios scnnode arkit xcode9

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

适用于iPhone X的原始深度贴图SDK

我做了一些搜索,发现了各种各样的例子,关于iPhone X Face ID的文档,以及它如何用于身份验证,动画表情符号等各种功能.

想要检查是否有API/SDK来获取从iPhone X传感器到应用程序的原始深度图?

根据我的理解,深度计算是基于投影模式完成的.这可用于获取传感器前方任何物体的深度剖面.(可能取决于对象的纹理.)

iphone ios iphone-x

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

GLSL ES Phong着色器结果中的设备/操作系统不一致

Apple的OpenGL ES最佳实践建议不要对片段着色器中计算的结果进行分支.但是,当光源位于表面的"错误"侧时,Phong阴影通常涉及跳过镜面术语,其中直接的方法是N点亮单位法线方向和光线方向L并检查阳性结果.

我试图在我的着色器中没有分支的情况下执行此操作:我不是使用if语句,而是对镜面反射项进行所有计算,然后给它一个系数,即1.0if dot(N, L)大于零,0.0否则.(我使用内置step()函数实现了这一点.结合max()sign()产生相同的结果,但据说速度有点慢.)

但是,这似乎导致奇怪的,设备和/或iOS版本特定的结果:

与分支没有分支

  • 在运行iOS 6.0的iPhone 4上,带分支的版本具有宽镜面高光(左图); 没有分支我看到一个狭窄的镜面高光(右图),尽管"光泽"指数保持不变.
  • 在iOS 6.0模拟器上,我看到了两个版本的着色器的第二个图像.
  • 在我的iPad(原始的2010型号,卡在iOS 5.1上),我看到第一个图像与两个版本的着色器.

显然,这不是问题的分支或缺乏.(顺便说一句,右手图像是"正确的"渲染.)

这是我的片段着色器:

precision mediump float;

uniform lowp vec3 ambientLight;
uniform lowp vec3 light0Color;
uniform lowp vec3 materialAmbient;
uniform lowp vec3 materialDiffuse;
uniform lowp vec3 materialSpecular;
uniform lowp float materialShininess;

// input variables from vertex shader (in view coordinates)
varying vec3 NormDir;
varying vec3 ViewDir;
varying vec3 …
Run Code Online (Sandbox Code Playgroud)

opengl-es glsl fragment-shader ios opengl-es-2.0

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

在选项卡之间滑动

如何使用 tabBarController 获得并排过渡。就像“正常”的 ScrollView 分页一样。

像这样的东西: 在此处输入图片说明

目前我正在使用 CrossDissolve:

class TransitioningObject: NSObject, UIViewControllerAnimatedTransitioning {

  func animateTransition(transitionContext: UIViewControllerContextTransitioning) {
    let fromView: UIView = transitionContext.viewForKey(UITransitionContextFromViewKey)!
    let toView: UIView = transitionContext.viewForKey(UITransitionContextToViewKey)!

    transitionContext.containerView()!.addSubview(fromView)
    transitionContext.containerView()!.addSubview(toView)

    UIView.transitionFromView(fromView, toView: toView, duration: transitionDuration(transitionContext), options: UIViewAnimationOptions.TransitionCrossDissolve) { finished in
        transitionContext.completeTransition(true)
    }
  }

  func transitionDuration(transitionContext: UIViewControllerContextTransitioning?) -> NSTimeInterval {
    return 0.25
  }
}
Run Code Online (Sandbox Code Playgroud)

作为并排过渡的扩展,我想在标签 self.view 上添加一个滑动手势。但这是后来的问题,现在我需要找出如何进行转换。

animation uitabbarcontroller ios swift

5
推荐指数
0
解决办法
1894
查看次数

如何创建左/右移动按钮?

请帮忙。我是 Swift 的初学者。我为播放器和左/右按钮添加了精灵。但是如何为每个按钮添加一个动作并将这些动作应用于播放器?

import SpriteKit

class GameScene: SKScene, SKPhysicsContactDelegate {

    var player: SKSpriteNode!
    var leftMove: SKSpriteNode!
    var rightMove: SKSpriteNode!

    override func didMoveToView(view: SKView) {

        player = SKSpriteNode (imageNamed: "player")

        player.position = CGPoint(x:127, y:125)

        addChild(player)


        leftMove = SKSpriteNode (imageNamed: "leftMove")

        leftMove.position = CGPoint(x:80, y:35)

        leftMove.size = CGSize (width: 55, height: 55)

        addChild(leftMove)


        rightMove = SKSpriteNode (imageNamed: "rightMove")

        rightMove.position = CGPoint(x:160, y:35)

        rightMove.size = CGSize (width: 55, height: 55)

        addChild(rightMove)

        physicsWorld.contactDelegate = self


    }
Run Code Online (Sandbox Code Playgroud)

sprite-kit swift

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

使用Swift 3请求图像导致"创建具有未知类型的图像格式是错误的"

我有一个控制器,我只需在用户的图库中获取图像并显示它们.它曾经与XCode 7.3一起使用,但在将其升级到XCode 8.0并更新Swift 3.0兼容性的代码之后,它给了我一个奇怪且非常通用的错误:

创建具有未知类型的图像格式是错误的

我无法弄清楚这里有什么不起作用.我的代码如下:

let imgManager = PHImageManager.default()  

let requestOptions = PHImageRequestOptions()  
requestOptions.isSynchronous = false  
requestOptions.deliveryMode = PHImageRequestOptionsDeliveryMode.fastFormat  

let fetchOptions = PHFetchOptions()  
fetchOptions.sortDescriptors = [NSSortDescriptor(key:"creationDate", ascending: false)]  

let fetchResult = PHAsset.fetchAssets(with: PHAssetMediaType.image, options: fetchOptions)  
if fetchResult.count > 0 {  
  for i in 0...(fetchResult.count-1) {  
    imgManager.requestImage(for: fetchResult.object(at: i), targetSize: view.frame.size, contentMode: PHImageContentMode.aspectFit, options: requestOptions, resultHandler: { (image, _) in  
      // do some stuff  
      self.progressView.isHidden = true  
    })  
  }  
} else {  
  self.progressView.isHidden = true  
}  
Run Code Online (Sandbox Code Playgroud)

在此代码中,我删除了图像可视化代码以提高可读性.触发错误的指令是"requestImage".任何帮助将非常感激.

xcode photosframework swift3 ios10

5
推荐指数
0
解决办法
2985
查看次数