这是我在找不到解决方案后不得不自己解决的问题。
问题在于,从 ScrollRect 的内容中删除 GameObject 元素后,它不会钳制其标准化位置,直到用户再次开始移动它。这可能会导致 ScrollRect 在显示最后一个元素时显示空白空间并且已停用父元素的最后一个元素。
我有一个
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的正确方法吗?
顺便说一句,这是一个很酷的方式来实现扩展基于下面的好答案
我有一个复杂的视图类,
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) Swift枚举有各种奇迹,比如初始化,你可以写一个变异函数等等.
但我想知道,当值发生变化时,你能简单地运行一些代码吗?
因此,当然使用属性+枚举,你可以做到这一点......这太棒了.
(注意,下面的vadian给出了一个完美的例子.)
所以我的问题很简单,Swift枚举是否有一个功能,可以让您在值发生变化时运行代码?
或者,总之,您是否必须使用属性/变异组合?
这是一个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
我正在为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) 这是一个,
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)
相关有趣的问题:
为什么编译器...... …
我在 Unity 中有一些(适当的、平面的)YUV 纹理,我只想看看它们供开发使用。
Unity(他们的着色器语言变体)实际上有一个可用的 YUV 着色器吗?
从概念上讲,从 YUV 转换为 RGB 很简单……但有点繁琐。
我有一个简单的管道描述符
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 …
我在做一个 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。)
似乎应该有更好/更优雅的方式 - 有没有办法更直接地“构建 …
ios ×6
swift ×4
c# ×1
cocoa-touch ×1
enums ×1
messaging ×1
metal ×1
optional ×1
singleton ×1
sqlite ×1
sqlite.swift ×1
swift3 ×1
swift5 ×1
uistoryboard ×1
unity3d-ui ×1
unity5 ×1
variables ×1
yuv ×1