我正在通过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) 有没有人知道找到(在文件系统中)具有给定包标识符的每个应用程序的好方法?NSWorkspace和启动服务允许您按包标识符查找应用程序,但只返回单个结果.我怀疑Spotlight(NSMetadataQuery)可能有所帮助,但我对它的API有点不清楚,所以我不确定是否有合适的密钥.
有一个命令行lsregister工具(在LaunchServices.framework内部),可以告诉它(重新)注册系统上的所有内容,然后转储它所知道的所有内容的报告.依赖于它似乎不太理想,因为它没有文档,解析它的输出可能是一个痛苦.
(背景:我正在构建一个用于游戏修改的应用程序,并希望提供用于从支持的游戏的简短列表中快速选择的UI,而不是要求用户在Open面板中挖掘整个文件系统.但是,我希望它相当可能是用户安装了多个游戏副本:发行版和测试版,用于修改的额外副本等)
我正在尝试将一些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个元素呢?
到目前为止,我已经有了这个代码
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我最终在不同的地方..
下面的代码将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) 我做了一些搜索,发现了各种各样的例子,关于iPhone X Face ID的文档,以及它如何用于身份验证,动画表情符号等各种功能.
想要检查是否有API/SDK来获取从iPhone X传感器到应用程序的原始深度图?
根据我的理解,深度计算是基于投影模式完成的.这可用于获取传感器前方任何物体的深度剖面.(可能取决于对象的纹理.)
Apple的OpenGL ES最佳实践建议不要对片段着色器中计算的结果进行分支.但是,当光源位于表面的"错误"侧时,Phong阴影通常涉及跳过镜面术语,其中直接的方法是N点亮单位法线方向和光线方向L并检查阳性结果.
我试图在我的着色器中没有分支的情况下执行此操作:我不是使用if语句,而是对镜面反射项进行所有计算,然后给它一个系数,即1.0if dot(N, L)大于零,0.0否则.(我使用内置step()函数实现了这一点.结合max()并sign()产生相同的结果,但据说速度有点慢.)
但是,这似乎导致奇怪的,设备和/或iOS版本特定的结果:


显然,这不是问题的分支或缺乏.(顺便说一句,右手图像是"正确的"渲染.)
这是我的片段着色器:
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) 如何使用 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 上添加一个滑动手势。但这是后来的问题,现在我需要找出如何进行转换。
请帮忙。我是 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) 我有一个控制器,我只需在用户的图库中获取图像并显示它们.它曾经与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".任何帮助将非常感激.