小编Oll*_*lie的帖子

使用标签栏解除视图控制器后停止的动画

问题
我有两个视图控制器,两者都包含在各自的UINavigationControllers和单个中UITabBarController.在其中一个视图控制器上,我创建了一个气泡效果,我在屏幕上绘制气泡并为其位置设置动画.当我使用标签栏移动到另一个视图控制器时会出现问题,这会导致CPU加速并保持100%并且气泡继续设置动画.

代码bubble
的代码封装在UIView子类中.

override func draw(_ rect: CGRect) {
    // spawn shapes
    for _ in 1 ... 10 { // spawn 75 shapes initially
      spawn()
    }
  }
Run Code Online (Sandbox Code Playgroud)

drawRect方法重复调用spawn函数以使用气泡填充视图.

fileprivate func spawn() {
    let shape = CAShapeLayer()
    shape.opacity = 0.0

    // create an inital path at the starting position
    shape.path = UIBezierPath(arcCenter: CGPoint.zero, radius: 1, startAngle: 0, endAngle: 360 * (CGFloat.pi / 180), clockwise: true).cgPath
    shape.position = CGPoint.zero

    layer.addSublayer(shape)


    // …
Run Code Online (Sandbox Code Playgroud)

ios catransaction swift

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

在两个圆形UIBezierPaths之间进行动画制作时的奇怪行为

问题
我正在创造爆炸环效果.我正在使用多个CAShapeLayerUIBezierPath为每个图层创建一个.初始化视图时,所有图层都有一个宽度为的路径0.触发动作时,环会为更大的路径设置动画.

如下面的演示所示,每个图层的右手边缘比每个圆形图层的其余部分的动画效果要慢.

演示
视频

绘制图层:

func draw(inView view: UIView) -> CAShapeLayer {

    let shapeLayer = CAShapeLayer()

    // size.width defaults to 0
    let circlePath = UIBezierPath(arcCenter: view.center, radius: size.width / 2, startAngle: 0, endAngle: CGFloat(360.0).toRadians(), clockwise: true)

    shapeLayer.path = circlePath.CGPath
    shapeLayer.frame = view.frame

    return shapeLayer
}
Run Code Online (Sandbox Code Playgroud)

更新图层

func updateAnimated(updatedOpacity: CGFloat, updatedSize: CGSize, duration: CGFloat) {

    let updatePath = UIBezierPath(arcCenter: view.center, radius: updatedSize.width / 2,
                                  startAngle: 0, endAngle: CGFloat(360).toRadians(), clockwise: true)

    let pathAnimation = CABasicAnimation(keyPath: …
Run Code Online (Sandbox Code Playgroud)

cashapelayer ios uibezierpath swift

7
推荐指数
1
解决办法
83
查看次数

TFL Unified API,用于所有线路中断响应的空机身

试图查询地下线路上的当前中断情况,并[]作为每个响应的正文接收.

我正在尝试发送的请求:

https://api.tfl.gov.uk/Line/bakerloo/Disruption?app_id=&app_key=

对行ID的请求按预期工作

https://api.tfl.gov.uk/Line/bakerloo?app_id=&app_key=

我在提出此请求时得到了正确的(和预期的)响应.

所以我的问题是:如果其他人正在使用这个API,并且他们也有类似的问题/知道如何获得比[]响应更有用的东西.

我刚刚使用REST客户端(Postman),因此它不依赖于编码/语言.

文档:https://api.tfl.gov.uk

rest

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

应用因准则 3.2 - 业务而被拒绝,下一步该怎么做?

由于我的应用程序被拒绝

准则 3.2 - 业务

我们发现您的应用不适合 App Store,因为它是专为 AppName 设计的。

通过批量购买计划将您的应用程序作为自定义 B2B 应用程序直接分发和销售给您的企业客户 会更合适 。您可以在iTunes Connect 开发人员帮助中找到有关批量购买计划和自定义 B2B App Store 的更多信息 。

现在我还使用另一个 Apple ID加入了批量购买计划,但现在我不知道下一步该怎么做,如何分发我的应用程序?

b2b ios app-store-connect

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

创建一个通用的UViewController初始化程序

我正在尝试创建UIViewController可用于初始化新实例的扩展。对于项目中的每个视图控制器,我都有一个相应的情节提要。

EditSomethingViewController.swift
EditSomethingViewController.storyboard
Run Code Online (Sandbox Code Playgroud)

这是我到目前为止的内容:

extension UIViewController {

    static func initalize() -> UIViewController? {
        let name = String(self)

        let storyboard = UIStoryboard(name: name, bundle: nil)

        return storyboard.instantiateInitialViewController()
    }

}
Run Code Online (Sandbox Code Playgroud)

但是,这意味着当我使用它时,我仍然必须强制转换响应。

if let viewController = EditSomethingViewController.initalize() as? EditSomethingViewController {
     // do something with view controller here  
}
Run Code Online (Sandbox Code Playgroud)

是否可以通过这种方式创建扩展名,这意味着我不必强制响应?

ps在一个用Swift 2.3编写的旧项目上工作,将不胜感激所支持的答案。

generics uiviewcontroller ios swift swift-protocols

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

指定完成处理程序的更短方法

我已经遇到过这个问题好几次了,所以我想我应该联系一下。

我有许多网络接口负责进行异步网络调用,每个接口中有大约 5/6 个函数,它们都使用具有相同定义的完成处理程序:

(success: Bool, resources: [String: AnyObject] -> Void)
Run Code Online (Sandbox Code Playgroud)

我正在寻找一种替代方法,将其添加到每个函数的末尾,因为它强制每个函数声明到 2/3 行。例如

func performSomeNetworkCall(withThisParam parm1: AnyObject, param2: AnyObject, completion: (success: Bool, resources: [String: AnyObject] -> Void)) {

}
Run Code Online (Sandbox Code Playgroud)

关于如何解决长声明问题和重写每个函数的完成定义,我有一些想法。

想法一

使用 atypealias来定义闭包,如下所示:

typealias CompletionHandler = (success: Bool, resources: [String: AnyObject] -> Void)?
Run Code Online (Sandbox Code Playgroud)

从理论上讲,这可以解决这两个问题,因为它可以快速编写并解决代码长度问题。然而,当从外部源调用函数时,它typealias不会像常规闭包那样自动完成,这意味着您必须每次都将其写出来,从而导致错误。


想法二

使用代码片段(当 Xcode 实际上记住您设置它们时)。理论上这也是有效的,只要处理该代码的每个其他开发人员也具有相同的代码片段并且它知道它而不是编写整个声明。


想法三

我考虑将完成处理程序定义为函数并将该函数作为参数传递,如下所示:

func completionHandler() -> (success: Bool, resources: [String: AnyObject] -> Void) {
        return completionHandler()
    }
Run Code Online (Sandbox Code Playgroud)

但未能实现我想要的目标。



编辑

我希望通过想法三实现什么

func completionHandler() -> ((success: Bool, resources: [String: AnyObject]) …
Run Code Online (Sandbox Code Playgroud)

closures ios swift

4
推荐指数
1
解决办法
2861
查看次数

观察添加到 Set 的值 - Swift

是否可以观察到添加到Set数据结构中的值?

我正在努力实现的目标:

var storedStrings = Set<String>() {
    didSet (value) {
        // where value is a string that has been added to the Set
    }
}
Run Code Online (Sandbox Code Playgroud)

示例:
storedStrings.insert("hello")
didSet 被调用,因为已添加新值。

storedString.insert("world")
didSet 再次调用。

storedString.insert("hello")
didSet 未调用,因为该集合已包含字符串“hello”

ios swift

3
推荐指数
1
解决办法
445
查看次数

以编程方式使UICollectionViewController不显示单元格

背景为黑色,单元格为白色,尽管任何单元格都未显示,但是没人simulator?会知道为什么会这样吗?

import UIKit
import Foundation

class ChatLog: UICollectionViewController, UITextFieldDelegate, UICollectionViewDelegateFlowLayout {

    let cellId = "cellId"

    override func viewDidLoad() {
        super.viewDidLoad()

        collectionView?.backgroundColor = UIColor.black
        collectionView?.register(UICollectionViewCell.self, forCellWithReuseIdentifier: cellId)    
    }

    override func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
        return 5
    }

    override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {

        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: cellId, for: indexPath)
        cell.backgroundColor = UIColor.white

        return cell
    }

    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: …
Run Code Online (Sandbox Code Playgroud)

uicollectionview swift

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

在C++中将.docx转换为.txt

为重复的(我认为)问题道歉,对C++来说是新手,并且已经浏览过但仍然卡住了!

我找到了一个bash脚本,它接受.docx文件并输出纯文本.

unzip -p filename.docx word/document.xml | sed -e 's/<[^>]\{1,\}>//g; s/[^[:print:]]\{1,\}//g'
Run Code Online (Sandbox Code Playgroud)

这比bash更好用.

然后在我的代码中使用它:

FILE *fp = popen("unzip -p filename.docx word/document.xml | sed -e 's/<[^>]\\{1,\\}>//g; s/[^[:print:]]\\{1,\\}//g'", "r");
char buf[1024];

if (fp == NULL) {
    cout << "Error";
}

while (fgets(buf, 1024, fp)) {
    /* do something with buf */
    cout << buf;
}

fclose(fp);
Run Code Online (Sandbox Code Playgroud)

由此没有打印任何内容.

代码使用简单的bash命令,例如'ls'

非常感谢帮助!

c++ bash

0
推荐指数
1
解决办法
517
查看次数