小编Coc*_*uts的帖子

从不调用交互式代理方法

我想在ViewController(1)和NavigationViewController(2)之间进行交互式转换.

NavigationController由一个按钮调用,因此在呈现时没有交互式转换.它可以通过按钮或UIPanGestureRecognizer来解除,因此它可以被交互或不被解雇.

我有一个名为TransitionManager的对象,用于转换,UIPercentDrivenInteractiveTransition的子类.

下面的代码的问题interactionControllerFor...是永远不会调用两个委托方法.

此外,当我按下按钮或swip(UIPanGestureRecognizer)时,模态segue的基本动画完成.所以这两个委托方法animationControllerFor...也不起作用.

有任何想法吗 ?谢谢

ViewController.swift

let transitionManager = TransitionManager()

override func viewDidLoad() {
    super.viewDidLoad()

    self.transitioningDelegate = transitionManager
}

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {

        let dest = segue.destinationViewController as UIViewController
        dest.transitioningDelegate = transitionManager
        dest.modalPresentationStyle = .Custom
}
Run Code Online (Sandbox Code Playgroud)

TransitionManager.swift

class TransitionPushManager: UIPercentDrivenInteractiveTransition,
 UINavigationControllerDelegate, UIViewControllerTransitioningDelegate {


@IBOutlet var navigationController: UINavigationController!

var animation : Animator! // Implement UIViewControllerAnimatedTransitioning protocol


override func awakeFromNib() {
    var panGesture = UIPanGestureRecognizer(target: self, action: "gestureHandler:")
    navigationController.view.addGestureRecognizer(panGesture)

    animation = Animator()
} …
Run Code Online (Sandbox Code Playgroud)

delegates transition interactive ios swift

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

使用AutoLayout在UIScrollView的底部查看

我正在使用autolayout在滚动视图中设置内容.滚动视图中的对象从上到下固定在前一个对象上,因此它们位于另一个之下.我有一个页脚视图,最后添加到这些对象下面.

这里有一个问题:当内容很少时,contentView将小于屏幕高度,因此页脚视图将出现在屏幕中间的某个位置(这是正常行为).但我想阻止它,并使视图停留在底部.

换句话说,我想设置一个双重约束,如:

Put this view below all the objects in the scrollview 
AND
keep this view at a distance of max [some number] of the bottom of the screen
Run Code Online (Sandbox Code Playgroud)

在某种程度上,两个约束总是得到满足:

  • 如果内容的高度大于屏幕,则向下滚动后,视图将显示在底部
  • 如果高度较小,则视图被"固定"到屏幕的底部,在内容的底部和此视图的顶部之间留下相对较大的空间

如何使用AutoLayout实现这一目标?

constraints ios autolayout swift

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

推送诡计不起作用的交互式过渡(斯威夫特)

我迷失在过渡的宇宙中.我想要一个推送segue的交互式过渡.以下代码适用于模态segue,但不适用于push one:

(使用push segue,动画不是交互式的并且是相反的)

FirstViewController.swift

let transitionManager = TransitionManager()


override func viewDidLoad() {
    super.viewDidLoad()

    transitionManager.sourceViewController = self

    // Do any additional setup after loading the view.
}

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) {

    let dest = segue.destinationViewController as UIViewController
    dest.transitioningDelegate = transitionManager
    transitionManager.destViewController = dest

}
Run Code Online (Sandbox Code Playgroud)

TransitionManager.swift

class TransitionManager: UIPercentDrivenInteractiveTransition,UIViewControllerAnimatedTransitioning, UIViewControllerTransitioningDelegate,UIViewControllerInteractiveTransitioning {

    var interactive = false
    var presenting = false

    var panGesture : UIPanGestureRecognizer!

var destViewController : UIViewController!

var sourceViewController : UIViewController! {
    didSet {

        panGesture = UIPanGestureRecognizer(target: self, …
Run Code Online (Sandbox Code Playgroud)

transition interactive push ios swift

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

UICollectionViewCell与故事板

我在故事板中有一个UICollectionView,位于UICollectionViewController中.UICollectionViewController链接到我的自定义class MasterViewController: UICollectionViewController, UICollectionViewDataSource, UICollectionViewDelegate,它的委托和数据源在故事板中链接到这个类.

我在故事板中有一个原型UICollectionViewCell,标识符为"MyCell",来自我的自定义 class Cell: UICollectionViewCell

在该cellForItemAtIndexPath方法中,应用程序在该行崩溃:let cell:Cell = collectionView.dequeueReusableCellWithReuseIdentifier("MyCell", forIndexPath: indexPath) as Cell

我找不到原因.我没有实现该registerClass:forCellWithReuseIdentifier:方法,故事板的标识符恰好是"MyCell",我检查了很多次,并且委托和数据源链接到正确的类.

当应用程序崩溃时,控制台中没有打印任何内容,只是"(lldb)"

这是我的代码:

class MasterViewController: UICollectionViewController,UICollectionViewDataSource,UICollectionViewDelegate {


var objects = [ObjectsEntry]()

@IBOutlet var flowLayout: UICollectionViewFlowLayout!

override func awakeFromNib() {
    super.awakeFromNib()
}


override func viewDidLoad() {
    super.viewDidLoad()

    flowLayout.itemSize = CGSizeMake(collectionView!.bounds.width - 52, 151)

}



// MARK: - Collection View

override func numberOfSectionsInCollectionView(collectionView: UICollectionView) -> Int {
    return 1
}

override func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> …
Run Code Online (Sandbox Code Playgroud)

storyboard ios uicollectionview uicollectionviewcell swift

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

“魔法移动”效果自定义转场

我试图在两个视图控制器之间进行自定义转换。首先,这是一张图片来说明我想要的:

我想要一个 UICollectionViewCell 扩展到整个屏幕。在此单元格中,子视图通过 IB 中的自动布局放置。

我只想让每个子视图转到新位置。所以我subview.frame = newSubview.frame在动画块中尝试过,但它不起作用(我认为是因为自动布局)。

我想在动画发生时删除约束,但它不起作用。

我还尝试对约束进行 @IBOutlets 并更改常量属性。

这是我的代码:

    let detailView = detailViewController.view
    let cellView = self.selectedCell

    container.addSubview(cellView!)

    let duration = self.transitionDuration(transitionContext)

    UIView.animateWithDuration(duration, delay: 0.0, options: .CurveEaseInOut, animations: {

            let newFrame = detailViewController.view.frame
            cellView!.frame = newFrame
            cellView!.imageView.frame = newFrame
            cellView!.labelTopConstraint.constant = 27
            cellView!.labelRightConstraint.constant = 8
            cellView!.layoutIfNeeded()
        }

...
Run Code Online (Sandbox Code Playgroud)

实际上,当动画开始时,标签捕捉到一个位置,然后它们移动,最后它们不在正确的位置......

有任何想法吗 ?谢谢

transition ios subviews autolayout

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

将 UIView(叠加)与应用程序背景混合

我想使用特殊的混合模式(在我的例子中为覆盖模式)将 UIView 与我的应用程序的背景混合。然而,要混合的视图包含在复杂的视图层次结构中。

\n\n

可以使用 来实现将视图与其直接同级视图混合view.layer.compositingFilter = "overlayBlendMode",但该视图不会与非同级视图(例如应用程序背景)混合。

\n\n

为了重现这个问题,我制作了以下游乐场:

\n\n
import UIKit\nimport PlaygroundSupport\n\nclass MyViewController : UIViewController {\n    override func loadView() {\n        let parentView = UIView()\n        parentView.backgroundColor = .purple\n\n        // Child view\n        let childView = UIView(frame: CGRect(x: 50, y: 50, width: 200, height: 200))\n        childView.layer.borderColor = UIColor.orange.cgColor\n        childView.layer.borderWidth = 3\n        parentView.addSubview(childView)\n\n        // Child child view\n        let childChildView = UIView(frame: CGRect(x: 50, y: 50, width: 100, height: 50))\n        childChildView.backgroundColor = .white\n        childChildView.layer.compositingFilter = "overlayBlendMode"\n        childView.addSubview(childChildView)\n\n        self.view = parentView\n    }\n}\n// …
Run Code Online (Sandbox Code Playgroud)

alphablending core-image calayer ios swift

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

UITableView ContentInset 和 ContentOffset

我的contentInset财产有问题。我有一个UITableView, 具有动态单元格大小 (AutoLayout)。我正在设置该contentInset属性以在内容顶部上方留出一些空间。但我得到以下结果:

意外结果

内容为蓝色,内容为紫色。当表格视图第一次出现时,它处于左边的情况。我可以滚动以找到正确的情况,这是有效的,但我希望表格视图直接出现在正确的插图中 - 我认为这将是默认行为。

我怎样才能做到这一点?

uitableview uiscrollview contentoffset swift

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

从相同的字符串生成相同的UUID

我想从随机字符串生成一个UUID字符串,以便相同的输入字符串生成相同的UUID。

我不关心从 UUID 获取输入字符串。作为迁移的一部分,我需要它来确定性地转换数据库中的密钥,以便并行操作的不同客户端收敛到相同的结果。

这篇文章接受的答案有 Java 中的答案,我需要 Swift 版本。

string uuid ios swift

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

@ViewBuilder 在属性上与 init 中,存储闭包或结果值

有什么区别:

@ViewBuilder财产上

struct SomeView<Content:View>: View {
    @ViewBuilder var content: () -> Content
}
Run Code Online (Sandbox Code Playgroud)

init,存储闭包

struct SomeView2<Content:View>: View {
    var content: () -> Content
    
    init(@ViewBuilder content: @escaping () -> Content) {
        self.content = content
    }
}
Run Code Online (Sandbox Code Playgroud)

init,存储结果值

struct SomeView3<Content:View>: View {
    var content: Content
    
    init(@ViewBuilder content: () -> Content) {
        self.content = content()
    }
}
Run Code Online (Sandbox Code Playgroud)

所有解决方案似乎都有效。那么为什么人们会选择其中一种而不是另一种呢?

swiftui

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

PDFKit iOS 11:如何更改Ink注释的线宽?

我正在使用PDFKit在PDF文件上绘制一些墨迹注释.但我无法改变线条的宽度.我以为这样做:

let path = UIBezierPath()
path.lineWidth = 20 // important line
path.move(to: originPoint)
path.addLine(...)
annotation.add(path)
Run Code Online (Sandbox Code Playgroud)

因为在Core Graphics中绘制时修改Bezier路径的lineWidth是可行的.但是在这里,它没有改变任何东西,那么如何改变注释的线宽?

annotations pdfkit ios swift

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