小编Tig*_*yan的帖子

我的导航栏的大标题太宽了.如何解决?

我正在使用导航控制器,我设置为真正的导航栏的prefersLargeTitle属性.一切都很好,但是当我的标题文字变得太大时,它就不适合空间.在这里看起来如何:

在此输入图像描述

有可能以某种方式使标题(当导航栏的prefersLargeTitle属性设置为true)动态调整其字体大小,如果是这样,如何实现?

uinavigationbar navigationcontroller ios swift

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

ScrollView平移手势与panGestureRecognizer之间的冲突

UIScrollView在中有一个UIViewController,由segue模态显示,另外一个UIPanGestureRecognizer确实通过pan关闭了视图控制器。此手势仅在以下情况下有效

 scrollView.contentOffset.y == 0
Run Code Online (Sandbox Code Playgroud)

问题是,现在两个平移手势相互冲突,我无法再滚动视图。

为了解决这个问题,我尝试使用gestureRecognizer(_: shouldRecognizeSimultaneouslyWith:)方法,返回yes,并且还尝试将自定义的平移手势添加到UIScrollView平移手势识别器中,如下所示:

 scrollView.panGestureRecognizer.addTarget(self, action: #selector(handlePanGesture(_:)))
Run Code Online (Sandbox Code Playgroud)

但是这些并不能解决问题。如果您知道如何解决此问题,请多多帮助。

已编辑

这是我的平移手势的代码,可消除视图控制器:

     @IBAction func handlePanGesture(_ sender: UIPanGestureRecognizer) {
    let percentThreshold: CGFloat = 0.3

    if scrollView.contentOffset.y == 0 {
        let translation = sender.translation(in: view)
        let verticalMovement = translation.y / view.bounds.height
        let downwardMovement = fmaxf(Float(verticalMovement), 0.0)
        let downwardMovementPercent = fminf(downwardMovement, 1.0)
        let progress = CGFloat(downwardMovementPercent)

        guard let interactor = interactor else {return}
        switch sender.state {
        case .began:
            interactor.hasStarted = true
            dismiss(animated: …
Run Code Online (Sandbox Code Playgroud)

uiscrollview ios uipangesturerecognizer swift

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

如何注册两个或多个自定义注释视图?

我正在尝试注册自定义注释视图(我将它们创建为 MKAnnotationView 的子类),但是我遇到了一些麻烦。最初,我尝试使用以下代码为单个注释标记仅注册一个自定义注释视图(RestaurantMarkerView 是我的自定义注释视图):

 mapView.register(RestaurantMarkerView.self, forAnnotationViewWithReuseIdentifier: MKMapViewDefaultAnnotationViewReuseIdentifier)
Run Code Online (Sandbox Code Playgroud)

它工作正常(当我点击图钉时,它会显示标注)。现在我添加另一个注释标记并尝试为其注册另一个视图,据我所知,在这种情况下,我应该为视图使用自定义标识符,因此我通过以下代码执行此操作:

  mapView.register(RestaurantMarkerView.self, forAnnotationViewWithReuseIdentifier: "a")
  mapView.register(ChoosenRestaurantMarkerView.self, forAnnotationViewWithReuseIdentifier: "b")
Run Code Online (Sandbox Code Playgroud)

现在,当我点击标记时,它们不会显示标注。当我将其中一个标记的重用标识符更改为 时MKMapViewDefaultAnnotationViewReuseIdentifier,该标记会显示标注。那么,如何注册多个自定义注释视图?谢谢。

mapkit ios mapkitannotation swift

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

为什么 Xcode 在“快速帮助”中不显示说明?

我正在开发一个项目,突然 Xcode(版本 9.1 (9B55))停止在快速帮助中显示类、方法等的描述。当我单击类和方法时,我可以看到相同的行为。例如,当我点击一个viewDidLoad()方法时,它看起来是这样的:

快速帮助中没有说明

但是,当我打开另一个项目时,它工作正常。这是另一个项目的屏幕截图,当我点击一个viewDidLoad()方法时:

快速帮助中有说明

所以,我认为,这不是与 Xcode 本身相关的问题(或者我错了),但也许我不小心破坏了项目中的某些内容。无论如何,我无法弄清楚是什么导致了这个问题。你有什么想法?

xcode xcode9

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

使用自定义过渡时,视图控制器是否会被完全删除?

我有两个视图控制器。在第一个我有一个按钮,它以模态方式显示第二个。然后,我通过点击它上的一个按钮来关闭第二个(它会下降)。为了消除过渡,我创建了一个符合 的自定义类UIViewControllerAnimatedTransitioning,因此我为视图控制器使用了自定义过渡动画(在消除过渡期间我需要一个自定义行为)。

我的问题如下:由于我使用了自定义转换,转换完成后我的视图控制器是否仍然被删除,或者它仍然存在但不在屏幕上?如果是的话,会不会影响内存,有多坏?

cocoa-touch uiviewcontroller ios

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

将 self 作为参数传递给方法

当我们将一个对象的实例作为参数传递给一个方法时,该方法定义在该对象内部,如下面的代码所示,它是否会创建一个保留循环?

 self.someMethod(self)
Run Code Online (Sandbox Code Playgroud)

swift

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

UIImage 在将其转换为 CIImage、然后转换为 CGImage 并返回 UIImage 时失去其方向

我知道有很多这样的问题,但他们的解决方案对我不起作用。

注:该图像是从互联网下载的。它不是从iPhone的相机中拍摄的。

我有一个UIImage。为了进行一些图像处理操作,我使用Metal并以MTKView. 因此,我将图像转换为CIImage. 对图像进行所有修改后,我将其转换回CGImageUIImage保存。

因此,保存的图像方向错误。

我不确定它在哪一步失去了方向(当从 转换UIImageCIImage添加到 时MTKView,或者从 转换CIImageCGImage然后转换UIImage为保存它时)。因为我不确定,所以下面我提供了我为每个步骤尝试过的所有内容:

用于从 转换UIImageCIImage

最初我只是简单地以这种方式转换图像:

let let ciImage = CIImage(image: image)
Run Code Online (Sandbox Code Playgroud)

然后我尝试使用以下方式:

  let ciImage = CIImage(image: image)?.oriented(forExifOrientation: imageOrientationToTiffOrientation(value: image.imageOrientation))
Run Code Online (Sandbox Code Playgroud)

这是该方法imageOrientationToTiffOrientation的实现(我在这里找到的):

func imageOrientationToTiffOrientation(value: UIImageOrientation) -> Int32
{
    switch (value)
    {
    case .up:
        return 1
    case .down:
        return 3 …
Run Code Online (Sandbox Code Playgroud)

uiimage cgimage ios ciimage swift

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

Apple 的照片应用程序中的过滤器 UIScrollView/UICollectionView 是如何实现的,它打开得如此之快?

我不是在问确切的代码,而是整体的想法。

这是我的问题:我正在尝试创建类似于在照片应用程序中选择 UI 的过滤器。我尝试了多种方法,但它们都有其缺点。

1)我尝试使用OperationOperationQueue集合视图,该视图启用了预取。这会快速加载 viewController,但在滚动时会掉帧。

2)现在我正在使用滚动视图,GCD但它加载 viewController 的时间太长(因为它一次将所有过滤器应用于其中的所有按钮),但随后它会平滑滚动。

注意: 要回答这个问题,不需要阅读以下部分(我相信),但是如果您对我如何尝试实现功能感兴趣,欢迎您阅读。

对于所有过滤器的实现,我使用了一个名为 struct 的结构Filters,它负责启动每个过滤器并将其附加到一个数组中。

struct Filters {
var image: UIImage
var allFilters: [CIFilter] = []

init(image: UIImage) {

    self.image = image

    guard  let sepia = Sepia(image: image) else {return}

    allFilters.append(contentsOf: [sepia, sepia, sepia, sepia, sepia, sepia, sepia, sepia, sepia, sepia, sepia, sepia, sepia])

       }
  }
Run Code Online (Sandbox Code Playgroud)

现在我只使用一个过滤器。Sepia是 的子类CIFilter。我已经将它创建为一个子类,因为将来我将根据它创建一个自定义的。这是它的实现:

class Sepia: CIFilter {

var inputImage: CIImage?
var inputIntensity: NSNumber?

@objc …
Run Code Online (Sandbox Code Playgroud)

xcode core-image uiimage ios swift

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