小编Cla*_*lis的帖子

Swift协议 - 属性类型子类

我正在定义一个调用的协议PanelController,我想在其中存储一个PanelView.PanelView它本身是一个子类,UIView定义了面板的基本结构.我有一个子类三种不同的观点PanelView:LeftPanel,MidPanel,和RightPanel.对于每个面板,我想定义一个xxxPanelController符合PanelController协议的(左,中,右).

我遇到的问题是协议和 xxxPanelController

protocol PanelController {
    var panelView: PanelView { get set }
    ...
}
Run Code Online (Sandbox Code Playgroud)

class LeftPanelController: UIViewController, PanelController {
    var panelView = LeftPanelView()
    ...
}
Run Code Online (Sandbox Code Playgroud)

哪里

class LeftPanelView: PanelView {
     ...
}
Run Code Online (Sandbox Code Playgroud)

和(最后一件......)

class PanelView: UIView {
    ...
}
Run Code Online (Sandbox Code Playgroud)

我得到一个错误说:LeftPanelController does not conform to protocol PanelController出于一个显而易见的原因:panelView类型LeftPanelView不是PanelView.这似乎真的仅限于我,因为它LeftPanelView是一个子类,PanelView所以它应该工作!但事实并非如此! …

syntax protocols ios swift

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

iOS图表 - 设置最小y轴范围

我正在使用神话般的iOS图表库(https://github.com/danielgindi/ios-charts),我很难在文档中找到任何支持此行为的内容.我想强制y轴始终显示0-35的范围.目前,如果我在说(0,9)中只有一个数据条目,则y轴将显示其范围为0-9.然而,当我在(1,32)处添加另一个条目时,突然我可以看到图形的顶部为35.

有三种方法看起来很有前景(因为它们是相关的),但它们并没有提供我正在寻找的行为类型.

1 :( Chart.setVisibleYRangeMaximum如果只是Minimum......)

2 :( Chart.setVisibleXRangeMaximum再没用了......)

3 :( Chart.setVisibleXRangeMinimum现在你的YRange堂兄在哪里?!)

所以无论如何,这就是我所处的位置.我看过文档,但无济于事.帮我吗?

charts ios swift ios-charts

11
推荐指数
3
解决办法
7907
查看次数

暂停时调用 UIViewPropertyAnimator 完成

我还没有使用过很多xe2x80x99t UIViewPropertyAnimator(仍然是一个老式的块家伙)并且我看到了一些我可以解释的行为xe2x80x99t并且文档没有xe2x80 x99t 确实提供了任何见解。

\n\n

为什么即使动画器在\xe2\x80\x99s启动后立即暂停,动画器\xe2\x80\x99s 完成块finalPosition也会被调用?.end

\n\n
let view = UIView()\nlet animator = UIViewPropertyAnimator(duration: 4, curve: .linear, animations: {\n    view.alpha = 0\n})\n\nanimator.addCompletion { position in\n    print("done")\n    switch position {\n    case .start: print("start")\n    case .current: print("current")\n    case .end: print("end")\n    }\n}\n\nanimator.startAnimation()\nprint("starting")\nanimator.pauseAnimation()\nprint("pausing")\n
Run Code Online (Sandbox Code Playgroud)\n\n

输出:

\n\n
starting\npausing\ndone\nend\n
Run Code Online (Sandbox Code Playgroud)\n

uikit ios swift uiviewpropertyanimator

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

UIStackView - 拖动以重新安排排列的子视图?

我正在尝试获得一些关于如何实现相同类型的"拖动重新排序"行为UITableView的建议UIStackView.

到目前为止,这就是我的想法:

  1. 为每个arrangedSubviews 添加长按手势识别器
  2. 长按,将叠加层UIView作为子视图添加到主视图,并填充整个主视图.这个叠加视图将作为各种各样的"画布",因为我拖动临时"重新排序"视图 - 我们称之为tempView- 周围(更多关于4)
  3. 设置alphaarrangedSubview0(设置hidden = true会导致UIStackView动画在关闭,如果它被拆除.
  4. 使用与初始帧相同的初始帧添加tempView到叠加视图(参见3)arrangedSubview
  5. tempView向上或向下拖动,arrangedSubview根据位置插入/删除计算出的索引处的实际值tempView.
  6. 听一听当长按state.Ended,设置arrangedSubview.alpha = 1并从主视图叠加视图.

有什么建议?任何人看到的任何明显的洞?你会改变什么?你会朝哪个方向去做?

uitableview uikit ios swift uistackview

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

UIImagePickerControllerDelegate从iOS 11中选取的图像获取日期

以前的解决方案已弃用- 不要投票或将其标记为重复

UIImagePickerControllerReferenceURL在iOS 11中已弃用(即使它仍在info字典中返回),应该替换为UIImagePickerControllerPHAsset,但我还没有info找回包含该键的字典。由于不推荐使用,而又不推荐使用,是否有已知的解决方案可以从拾取的图像中提取“拍摄日期”?

作为参考,下面是info当从库中选取和图像时返回的示例字典:

? 4 elements
  ? 0 : 2 elements
    - key : "UIImagePickerControllerImageURL"
    - value : file:///private/var/mobile/Containers/Data/Application/EE1BA60E-2DC3-47C5-A58D-86498E95C323/tmp/3A025D4C-B378-474B-8A09-017479A3A776.jpeg
  ? 1 : 2 elements
    - key : "UIImagePickerControllerMediaType"
    - value : public.image
  ? 2 : 2 elements
    - key : "UIImagePickerControllerReferenceURL"
    - value : assets-library://asset/asset.HEIC?id=537976CD-A550-41C9-9416-92C8072112D7&ext=HEIC
  ? 3 : 2 elements
    - key : "UIImagePickerControllerOriginalImage"
    - value : <UIImage: 0x1d04b4760> size {3024, 4032} orientation 3 scale 1.000000
Run Code Online (Sandbox Code Playgroud)

(请注意UIImagePickerControllerReferenceURL …

uiimagepickercontroller ios swift

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

iOS PDFKit 在 PDFView 中调整 pdf 框架

我有一个 PDF,其中包含不同高度的页面,我希望以水平分页方式显示,一次一页,页面之间没有间隙,并且每个页面的顶部与视图的顶部对齐。例如:

所需的渲染

我想使用PDFKit's PDFView,特别是因为这些设置可以通过以下方式实现:

let pdfView = PDFView()
pdfView.displayDirection = .horizontal
pdfView.displaysPageBreaks = false
pdfView.usePageViewController(true, withViewOptions: nil)
Run Code Online (Sandbox Code Playgroud)

但是,这会产生以下结果:

实际渲染

这是由于页面的高度不同。每个页面在 中垂直居中PDFView,如果页面的高度大于视图的高度(例如第 2 页),则按比例缩放以适应。

为了尝试解决第一个问题,垂直偏移,我尝试了几件事。首先,这是毛,我知道这是错的,检查视图层次结构,并找到个人视图(已命名的类的观点后PDFTextInputView,页面呈现内我已经试过调整其框架的)origin.y0时最外面的滚动视图(另一个私人视图)滚动。这是因为每当下一页或上一页滚动到视图中时,页面都会呈现在视图的顶部。但是,一旦用户捏住以放大该页面,其框架会自动跳回居中。除了依赖私有视图层次结构之外,这种方法是行不通的。

为了尝试解决“高页面问题”(第 2 页),我尝试在出现新页面时调整 PDFView 的比例因子。遗憾的是,.PDFViewPageChanged通知仅滚动视图结束减速才会触发,因此页面在滚动时会缩小,然后当我调整比例因子时,它会跳转以适应屏幕的宽度。然后我转向.PDFViewVisiblePagesChanged在下一页/上一页出现时确实会触发的.PDFViewPageChanged.

我尝试过的其他事情:

  • 调整transform文档视图
  • 截取捏合手势并调整文档视图的中心
  • 创建我自己的页面控制器并每页渲染一个 PDF 页面(不使用pdfView.usePageViewController

有没有人对我如何实现我所追求的有任何想法?

ios swift ios-pdfkit apple-pdfkit

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

SwiftUI 预览表不运行实时预览?

更新 Xcode 13 下面的代码示例在 Xcode 13 中按预期工作。

Apple 框架工程师2020 年 10 月更新:

不幸的是,当前没有解决方法可以让您在实时预览之外预览此内容。


是否可以在不运行实时预览的情况下创建所呈现工作表的 SwiftUI 预览?例如:

struct Sheet_Previews: PreviewProvider {
    static var previews: some View {
        Text("Background").sheet(isPresented: .constant(true)) {
            Text("Sheet")
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

上述结果产生以下预览:

在此输入图像描述

为了在预览中显示工作表内容,您必须运行实时预览:

在此输入图像描述

swiftui xcode-previews swiftui-previews

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

打开 Xcode 项目并从终端设置活动文件

从终端打开 Xcode 项目很简单:

open Foo.xcodeproj/

但这只是打开项目并恢复其之前的状态UserInterfaceState.xcuserstate- 因此它只是打开您正在编辑的最后一个活动文件。

有没有办法打开 Xcode 项目指定它应该打开到哪个文件?

我尝试过的:

  1. 编辑.xcuserstate- 噩梦,不要这样做。
  2. 运行open Foo/Foo.xcodeproj/then有时open Foo/Sources/main.swift会起作用,但并非总是如此。(如果您刚刚生成项目并执行此操作,它将打开该项目,然后在单独的窗口中打开该文件。)

还有其他想法吗?

bash terminal xcode

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

CoreData是Swift中必需的setValue(_:forKey :)吗?

在CoreData中更新实体时,是否需要使用setValue(_:forKey:),或者您可以使用默认的setter设置值?

someEntity.setValue("Bob", forKey: "Name")

someEntity.name = "Bob"

第一种方法触发KVC,第二种方法不触发(正确?).

接受的答案确认上述内容不正确.默认情况下,@ NSManaged在Swift属性上启用KVC.

那么托管对象上下文是否无法识别更改?使用默认的setter有什么缺点吗?我在任何文档中都找不到明确的答案.我的测试显示它工作得很好,但有些东西我不知道将来会再次咬我吗?

我在任何文档中找到的最接近的答案来自使用Swift的Key-Value Coding下的Key-Value Coding Programming Guide

从NSObject或其子类之一继承的Swift对象默认情况下是符合其属性的键值编码.而在Objective-C中,属性的访问器和实例变量必须遵循某些模式,Swift中的标准属性声明会自动保证这一点.

core-data ios swift

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

是否可以为UIEdgeInsets设置动画?

我一直在尝试动画改变UIEdgeInsets.我已经尝试过使用UIView.animateWithDuration了,插件只是跳转到最终值.有谁知道这是一个不能动画的属性?或者更好的是,有人知道一种动画插图的方法吗?

举个例子:

// Starting inset values
self.searchField.placeHolderInset = UIEdgeInsets(top: 0, left: 110, bottom: 0, right: 10)

// Animation block
UIView.animateWithDuration(0.1, animations: {
        self.searchField.placeHolderInset = UIEdgeInsets(top: 0, left: 18, bottom: 0, right: 10)
})
Run Code Online (Sandbox Code Playgroud)

文本跳转到最终值,而不是在0.1秒内向左移动92个像素.searchField是一个UITextField并且.placeHolderInset是UIEdgeInset用于确定UITextField占位符文本的插入.

编辑:要达到预期的效果的另一种方式是通过改变UITextField.textAlignment.Center.Left但不会动画无论是.

animation uitextfield uiviewanimationtransition ios swift

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

如何从 iOS 中的音频剪辑中检索 PCM 样本数据?

我需要从 iOS 中的 .wav 文件(或任何其他格式)中提取 PCM 音频样本。我还想从使用麦克风的现场录音中获取相同的数据。

这可以使用 AVFoundation 来完成,还是我需要使用较低级别的 CoreAudio API?Swift 中的示例将不胜感激。我只是在寻找与用于信号处理的单个音频样本相对应的基本浮点数组。

audio core-audio avfoundation ios swift

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

枚举案例的Swift类型

好吧,我已完成了我的作业并阅读了我能找到的内容,但我似乎无法找到是否可以用Swift完成.我有一个我在整个地方使用的枚举:SomeEnum如果它case是一个冗长SomeEnum.SomeLengthyCaseName而我厌倦了在我的代码中看到它.我不想重构,因为我喜欢新手维护我的代码的情况的描述性.

所以这就是问题:是否有可能创建一个typealiasfor SomeEnum.SomeLengthyCaseName?如果是这样,怎么样?这是我尝试过的:

enum SomeEnum {
    case SomeLengthyCaseName
}

typealias SLCN = SomeEnum.SomeLengthyCaseName
Run Code Online (Sandbox Code Playgroud)

这是语法,但Xcode给出了一个编译错误,说" SomeLenghtyCaseName不是它的成员" SomeEnum.

预备,准备,开始!

syntax enums ios type-alias swift

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