因为对象是引用类型而不是值类型,所以如果设置UIView等于另一个UIView,则视图是同一个对象.如果你修改一个,你也会修改另一个.
我有一个有趣的情况,我想UIView在另一个视图中添加一个子视图,然后我做一些修改,这些修改不应该影响原始UIView.我如何制作副本,UIView以便我可以确保将该副本添加为子视图而不是对原始副本的引用UIView?
请注意,我无法以创建原始的方式重新创建视图,我需要一些方法来创建给定任何UIView对象的副本.
我正在考虑让UIView渲染到另一个UIView以及第一个UIView的方法.所以我有我的主UIView它的界限,而UIView也在其他一些UIView中呈现.
这可能吗 ?它需要大量的层操作吗?
我需要一种UIView可以用于多种不同的定制ViewControllers.通常当我创建自定义时UIView,我将一个实例UIView拖入我ViewController的故事板中,创建一个子类UIView,并Identity Inspector在视图中指向此子类.从那里,我将UI对象作为出口连接到子类的头文件.
我现在要制作的视图不应该是任何特定控制器的一部分,而应该添加到任何要求它的控制器中.流氓UIView.我知道我可以以UIView编程方式创建整个,只是创建它的实例,但我想在我的故事板中拥有它(并设计它).
在Storyboard中,我允许在"ViewController"之外拖动的唯一对象是其他ViewControllers.
我从未使用过故事板以外的任何东西进行iOS开发,但是我已经找到了使用其他模式的教程,从过去的日子开始,看起来就像我需要的那样.是否有可能得到类似的东西进入我的故事板?或者这需要自己的设置/设计?如果是这样,怎么样?
我还在考虑通过添加UIViewController包含我的自定义视图的"幻像"来解决这个问题.在那里设计,但从其他控制器实例化,但这听起来很hacky ..
我也想这样做UITableViewCell,但我想这将有相同的解决方案.
我有这个代码在iOS 7上工作:
NSData *imageData = [NSKeyedArchiver archivedDataWithRootObject:self.imageView.image];
UIImage *imageCopy = [NSKeyedUnarchiver unarchiveObjectWithData:imageData];
NSLog(@"%@",NSStringFromCGSize(imageCopy.size));
Run Code Online (Sandbox Code Playgroud)
但在iOS 8上,其imageCopy大小始终为零.UIImageView存档时也会发生同样的事情,未归档的imageView图像的大小为零.我发现在iOS 7中,UIImage标题如下:
UIImage : NSObject <NSSecureCoding, NSCoding>
Run Code Online (Sandbox Code Playgroud)
但在iOS 8上它是:
UIImage : NSObject <NSSecureCoding>
Run Code Online (Sandbox Code Playgroud)
看起来NSCodingiOS 8上缺少协议.我必须对实际图像数据进行编码:UIImagePNGRepresentation(self.imageView.image)而不是图像,以确保我得到一个好的图像.
有谁知道为什么会这样?它是为了向后兼容吗?我注意到iOS早期版本UIImage不符合NSCoding.
ios ×4
uiview ×3
xcode ×2
ios8 ×1
iphone ×1
objective-c ×1
swift ×1
uiimage ×1
uistoryboard ×1