小编Fat*_*tie的帖子

从内容中删除/停用子元素后,在夹紧规范化位置时,ScrollRect 无法正确更新位置

这是我在找不到解决方案后不得不自己解决的问题。

问题在于,从 ScrollRect 的内容中删除 GameObject 元素后,它不会钳制其标准化位置,直到用户再次开始移动它。这可能会导致 ScrollRect 在显示最后一个元素时显示空白空间并且已停用父元素的最后一个元素。

  • 在用户与 ScrollRect 内容交互之前,规范化的位置值不会更新。
  • 在停用元素后手动设置规范化位置将不起作用,因为它正在处理尚未更新的旧值(请参阅上文了解原因)。

unity-game-engine unity3d-ui

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

在Swift中查找类的兄弟视图

我有一个

  class Fancy:UIButton
Run Code Online (Sandbox Code Playgroud)

我想找到同一类的所有兄弟视图.

我这样做

for v:UIView in superview!.subviews
    {
    if v.isKindOfClass(Fancy)
        {
        // you may want... if (v==self) continue
        print("found one")
        (v as! Fancy).someProperty = 7
        (v as! Fancy).someCall()
        }
    }
Run Code Online (Sandbox Code Playgroud)

它似乎在测试中可靠地工作(没有兄弟姐妹,许多等)

但是有很多"!" 在那里.

这是Swift的正确方法吗?


顺便说一句,这是一个很酷的方式来实现扩展基于下面的好答案

将类型传递给通用Swift扩展,或者理想地推断它

ios swift

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

在Swift中,将"anywhere"注册为协议的委托

我有一个复杂的视图类,

class Snap:UIViewController, UIScrollViewDelegate
   {
   }
Run Code Online (Sandbox Code Playgroud)

最终的结果是,用户可以选择一种颜色......

protocol SnapProtocol:class
    {
    func colorPicked(i:Int)
    }
class Snap:UIViewController, UIScrollViewDelegate
   {
   someDelegate.colorPicked(blah)
   }
Run Code Online (Sandbox Code Playgroud)

那么谁将会处理它.

让我们说你肯定知道响应者链上有什么东西,甚至走过容器视图,这是一个SnapProtocol.如果是这样,您可以使用这个可爱的代码来调用它

var r : UIResponder = self
repeat { r = r.nextResponder()! } while !(r is SnapProtocol)
(r as! SnapProtocol).colorPicked(x)
Run Code Online (Sandbox Code Playgroud)

如果您愿意,可以使用此最佳扩展名

public extension UIResponder        // walk up responder chain
    {
    public func next<T>() -> T?
        {
        guard let responder = self.nextResponder()
            else { return nil }
        return (responder as? T) ?? responder.next()
        }
    } …
Run Code Online (Sandbox Code Playgroud)

messaging singleton ios swift swift-protocols

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

Swift枚举:在价值变化上执行代码?

Swift枚举有各种奇迹,比如初始化,你可以写一个变异函数等等.

但我想知道,当值发生变化时,你能简单地运行一些代码吗?

因此,当然使用属性+枚举,你可以做到这一点......这太棒了.

(注意,下面的vadian给出了一个完美的例子.)

所以我的问题很简单,Swift枚举是否有一个功能,可以让您在值发生变化时运行代码

或者,总之,您是否必须使用属性/变异组合?

enums ios swift

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

只需使用storyboard,约束来设置UICollectionView中的单元格大小

这是一个UICollectionView,紫色的单元格:

在此输入图像描述

很简单,我希望单元格是集合视图宽度的1/2.(所以TBC,它将是集合视图中两行排列的单元格.)

(集合视图只是全屏,因此每个单元格都是屏幕宽度的一半.)

你如何在故事板中做到这一点?

如果我尝试以正常方式控制拖动,它基本上不起作用.

这些是简单的完全静态单元(非动态).


对于任何在Google上搜索的人来说,为了节省您的时间:这是(2016)最简单的方法来制作两个跨越UICollectionView的布局; 细胞之间没有间隙.

// Two - two-across UICollectionView
// use a completely standard UIViewController on the storyboard,
// likely change scroll direction to vertical.
// name the cell identifier "cellTwo" on the storyboard
import UIKit
class Two:UICollectionViewController
    {
    override func viewDidLoad()
        {
        super.viewDidLoad()

        let w = collectionView!.bounds.width / 2.0

        let layout: UICollectionViewFlowLayout = UICollectionViewFlowLayout()
        layout.sectionInset = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 0)
        layout.itemSize = CGSize(width:w,height:w)
        layout.minimumInteritemSpacing = 0
        layout.minimumLineSpacing = 0

        collectionView!.collectionViewLayout = …
Run Code Online (Sandbox Code Playgroud)

cocoa-touch ios uistoryboard uicollectionview nslayoutconstraint

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

如何在Unity3D中保存自定义变量?

我正在为Unity3D中的游戏开发一个保存和加载系统.像位置这样的基础很简单,我就是这样

 public void Save() {

     PlayerPrefs.SetFloat ("X", transform.position.x);
     PlayerPrefs.SetFloat ("Y", transform.position.y);
     PlayerPrefs.SetFloat ("Z", transform.position.z);

 }

 public void Load() {

     float x = PlayerPrefs.GetFloat ("X");
     float y = PlayerPrefs.GetFloat ("Y");
     float z = PlayerPrefs.GetFloat ("Z");

     transform.position = new Vector3 (x, y, z);

 }
Run Code Online (Sandbox Code Playgroud)

但是当我想要保存自定义变量时,它就出现了.以下是包含它们的类如下所示:

     [SerializeField] private Stat health; 
     public static Stat Health { get; set; }
     [SerializeField] private Stat exp;
     public static Stat Exp { get; set; }
     [SerializeField] private Stat oxygen;
     public static Stat Oxygen { get; set; }
     [SerializeField] …
Run Code Online (Sandbox Code Playgroud)

c# variables serialization unity-game-engine unity5

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

使用SQLite.Swift时的细微投射警告......绑定?去任何

这是一个,

 import SQLite

    var r:[[Any]] = []

    do {
        if let stmt = try local.db?.prepare(q) {
            r = Array(stmt)
        }
        else {
            print("woe in sql?")
        }
    }
    catch { return [] }
Run Code Online (Sandbox Code Playgroud)

电话

 r = Array(stmt)
Run Code Online (Sandbox Code Playgroud)

使表达从隐含裹挟"绑定?去任何.

在此输入图像描述

事实上,我不知道如何提供默认值以避免此警告,强制解包该值以避免此警告,或者甚至使用"as Any"显式转换为Any以使此警告静音.:o

这是一个重现相同警告的自包含示例:

struct Binding {}

struct Statement : IteratorProtocol, Sequence {
    func next() -> [Binding?]? {
        return nil
    }
}

let stmt = Statement()

let r: [[Any]]

r = Array(stmt) // warning: Expression implicitly coerced from 'Binding?' to Any.
Run Code Online (Sandbox Code Playgroud)

相关有趣的问题:

为什么编译器...... …

sqlite optional swift sqlite.swift swift3

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

Unity 的 YUV 着色器?

我在 Unity 中有一些(适当的、平面的)YUV 纹理,我只想看看它们供开发使用。

Unity(他们的着色器语言变体)实际上有一个可用的 YUV 着色器吗?

从概念上讲,从 YUV 转换为 RGB 很简单……但有点繁琐。

yuv unity-game-engine unity3d-shaders

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

只是使Metal Frag着色器成为透明颜色?

我有一个简单的管道描述符

 let p = MTLRenderPipelineDescriptor()
 ...
 p.colorAttachments[0].pixelFormat = .bgra8Unorm
Run Code Online (Sandbox Code Playgroud)

背景为纯蓝色

 let bg = MTLClearColor(red: 0, green: 0, blue: 1, alpha: 1)

 let pass = MTLRenderPassDescriptor()
 pass.colorAttachments[0].loadAction = .clear
 pass.colorAttachments[0].clearColor = bg
Run Code Online (Sandbox Code Playgroud)

我只是在上面画一个多边形,说一个红色的:

fragment half4 fattie_fragment() {
    return half4(1,0,0, 1);
}
Run Code Online (Sandbox Code Playgroud)

还是绿色...

fragment half4 fattie_fragment() {
    return half4(0,1,0, 1);
}
Run Code Online (Sandbox Code Playgroud)

What to do in Metal if you want the triangle color to be transparent?

fragment half4 fattie_fragment() {
    return half4(0,1,0, 0.275);
}
Run Code Online (Sandbox Code Playgroud)

(Note - TBC I don't want the overall view …

ios metal

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

直接渲染 CGImage(而不是 UIImage)?

我在做一个 CGImage

func otf() -> CGImage {
Run Code Online (Sandbox Code Playgroud)

这是渐变上的贝塞尔蒙版。所以,

    // the path
    let p = UIBezierPath()
    p.moveTo etc

    // the mask
    let m = CAShapeLayer()
    set size etc
    m.path = p.cgPath

    // the layer
    let l = CAGradientLayer()
    set colors etc
    l.mask = m
Run Code Online (Sandbox Code Playgroud)

完成。所以然后UIImage以通常的方式渲染 a ......

    UIGraphicsBeginImageContextWithOptions(sz.size, false, UIScreen.main.scale)
    l.render(in: UIGraphicsGetCurrentContext()!)
    let r = UIGraphicsGetImageFromCurrentImageContext()!
    UIGraphicsEndImageContext()
Run Code Online (Sandbox Code Playgroud)

但。然后要返回它,当然你必须转换为 CGImage

    return r.cgImage!
Run Code Online (Sandbox Code Playgroud)

(如果您使用类似 ..

UIGraphicsImageRenderer(bounds: b).image { (c) in v.layer.render(in: c) }
Run Code Online (Sandbox Code Playgroud)

.. 你得到一个 UIImage,而不是一个 CGImage。)

似乎应该有更好/更优雅的方式 - 有没有办法更直接地“构建 …

core-graphics ios swift5

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