小编ima*_*145的帖子

iOS 8共享扩展自定义视图控制器大小

我正在为我的iOS应用程序构建共享扩展,我无法使用默认设置SLComposeServiceViewController,所以我创建了(在故事板中)基本的UIViewController并嵌入在导航控制器中.我得出现它,解雇它等但它总是全屏.我想让它看起来更像是一个对话框.我尝试self.preferredContentSize在我的视图控制器上使用,尝试Use Preferred Explicit Size在Interface Builder中的导航控制器,但它不起作用.

ios8 ios-app-extension ios8-share-extension

29
推荐指数
2
解决办法
7065
查看次数

在UITextView上点击时,未调用UICollectionView didSelectItemAtIndexPath

我有UICollectionView自定义单元格 - 它们UITextView主要覆盖整个单元格.这在使用时出现问题didSelectItemAtIndexPath.触发它的唯一方法是在外面敲击UITextView.我想让它在您点击的单元格中的任何位置触发,无论是否有文本视图.如何才能做到这一点?

ios uicollectionview uicollectionviewcell ios7

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

分派到主线程时返回值

我有一个func getValue() -> Bool从后台线程调用的函数。这是有意的,也是必需的。现在,getValue()需要在主线程上执行一些东西,在这种情况下它需要访问UIApplication.shared.canOpenURL,它必须在主队列上运行。

这是我目前的功能:

func getValue() -> Bool {
    guard let url = URL(string: "someurl") else { return false }
    return UIApplication.shared.canOpenURL(url)
}
Run Code Online (Sandbox Code Playgroud)

如何将该函数转换为线程安全的函数,即确保它始终在主线程上运行,而无需

  • 从主线程调用函数开始
  • 重构函数以在闭包中返回值

我试过这个:

// This causes a deadlock, see /sf/answers/2973926931/
func getValue() -> Bool {
    var flag = false

    let group = DispatchGroup()
    group.enter()
    DispatchQueue.main.async {
        if let url = URL(string: "someurl"), UIApplication.shared.canOpenURL(url) {
            flag = true
        }
        group.leave()
    }
    group.wait()

    return flag
}
Run Code Online (Sandbox Code Playgroud)

和这个:

// This crashes with …
Run Code Online (Sandbox Code Playgroud)

multithreading grand-central-dispatch ios swift

10
推荐指数
2
解决办法
5359
查看次数

iOS 8上的ptrace

我试图ptrace像这样调用一个函数ptrace(PT_DENY_ATTACH, 0, 0, 0); 但是当我尝试使用#include <sys/ptrace.h>Xcode 导入它时给了我一个错误'sys/ptrace.h' file not found.我错过了什么,我是否需要导入一个库,或者这在iOS上根本不可用?

ptrace file-not-found ios8

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

包含尖括号<>的奇数属性声明语法

我刚从2015 WWDC示例代码(https://developer.apple.com/sample-code/wwdc/2015/)下载了FourInARow,并注意到文件中有一个奇怪的属性声明AAPLViewController.m

@property NSArray<NSMutableArray<CAShapeLayer *> *> *chipLayers;
Run Code Online (Sandbox Code Playgroud)

这是什么意思?

objective-c ios

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

如何更快速地转置数组?

我前段时间也问过类似的问题。有人问我怎样才能变成这样的数组:

[[1,2,3],[4,5,6],[7,8,9]]
Run Code Online (Sandbox Code Playgroud)

对此:

[1,2,3,4,5,6,7,8,9]
Run Code Online (Sandbox Code Playgroud)

但是现在我想把相同的数组变成这个:

[1,4,7,2,5,8,3,6,9]
Run Code Online (Sandbox Code Playgroud)

假设所有子数组具有相同的长度。

如果您尚未注意到,结果中的前三项就是这三个子数组中的第一项。结果中的第四,第五和第六项是每个子数组的第二项。

如果您仍然不了解,也许这会有所帮助:

原始数组:

[
    [1,2,3],
    [4,5,6],
    [7,8,9]
]
Run Code Online (Sandbox Code Playgroud)

结果:

[
    1,4,7,
    2,5,8,
    3,6,9
]
Run Code Online (Sandbox Code Playgroud)

此刻,我有这个:

func flatten(array: [[Int]]) -> [Int] {
    var flat = [Int]()
    for i in 0..<array[0].count {
        for subarray in array {
            flat.append(subarray[i])
        }
    }
    return flat
}
Run Code Online (Sandbox Code Playgroud)

我不认为这很花哨。如何快速进行此操作?

为了避免成为XY问题,这就是我要这样做的原因。

我正在开发一个棋盘游戏。我正在使用HLSpriteKit中的棋盘游戏HLGridNode(基本上是一堆正方形的网格状布局)。要编辑网格节点的内容,我需要传递一个Sprite节点的1D数组,而不是2D数组。

为了使生活更轻松,我将模型对象存储在2D数组中。这样,我可以通过以下操作从左边引用5个正方形,从顶部引用2个正方形:

modelObjects[5][2]
Run Code Online (Sandbox Code Playgroud)

如果我使用展平2D数组.flatMap { $0 }并将结果传递到网格节点,则它modelObjects[5][2]看起来将是从左侧2个正方形和从顶部5个正方形。

这不是重复这个,因为这个问题似乎有数组与工作的明确的数量。尽管我可以将2D数组放入一个循环中并执行这些操作enumerate().map {...},但这似乎是一个漫长的过程。我认为使用2D阵列进行此操作必须更简单。

flatten multidimensional-array swift

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