我已经为视图控制器添加了多个元素,并为它们添加了复杂的约束。但现在我想从UIImageView更改为UIButton。
在故事板中更改课程是否可行?
我知道身份检查器中的类属性,但是没有更改元素。
我真的不想再次制定约束,但如果没有其他办法,我将不得不这样做。
答案 0 :(得分:2)
我认为不可能替换视图。但还有另一种解决方案。
保持UIImageView不变,透明,并将其用作容器,将UIButton作为子视图添加到其中,并添加约束以使按钮填满整个图像视图。
让您的图片视图具有透明背景,并且不要忘记将func draw(start: CGPoint, end: CGPoint){
UIGraphicsBeginImageContext(self.subImageView.frame.size)
let context = UIGraphicsGetCurrentContext()
subImageView?.image?.drawInRect(CGRect(x: 0, y: 0, width: subImageView.frame.width, height: subImageView.frame.height))
CGContextSetLineWidth(context, 6)
CGContextBeginPath(context)
CGContextMoveToPoint(context, start.x, start.y)
CGContextAddLineToPoint(context, end.x, end.y)
CGContextSetStrokeColorWithColor(context, UIColor.redColor().CGColor)
CGContextStrokePath(context)
let newImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
subImageView.image = newImage
}
设置为userInteractionsEnabled
。
与添加UITapGestureRecognizer相比,使用此方法,您将拥有一个包含所有功能的实际按钮。
答案 1 :(得分:2)
它不可行,更好的方法:为UIImage添加一个轻击手势,我建议将来使用堆栈视图和"添加缺失的约束",用此你不会有很多麻烦在将来改变它
答案 2 :(得分:0)
感谢每一个人,
我不喜欢懒惰和添加更多元素的想法因为,所以我决定使用以下方法,它对我来说非常有用:
P.S。这个容器里有几十个约束,相对来说它花了很短的时间,我希望不会再犯这个错误,但最终可能会犯这个错误。对我来说,添加元素(识别器或顶部的其他按钮)和随附的代码
要好得多 每个人都是10倍。答案 3 :(得分:0)
您可以编辑基础XML。要做到这一点:
然后您将看到约束列出如下:
<constraints>
<constraint firstItem="NBy-b0-qdt" firstAttribute="centerX" secondItem="8bC-Xf-vdC" secondAttribute="centerX" id="JOl-XX-NS8"/>
<constraint firstItem="NBy-b0-qdt" firstAttribute="centerY" secondItem="8bC-Xf-vdC" secondAttribute="centerY" id="mFA-R7-Xir"/>
</constraints>
firstItem
和secondItem
与对象的ID相关,因此您需要做的就是为{id}移出firstItem
(或secondItem
)id新对象。
注意:您的对象将位于subviews
标记内,并且看起来像这样:
<textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" misplaced="YES" contentHorizontalAlignment="left" contentVerticalAlignment="center" borderStyle="roundedRect" textAlignment="natural" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="NBy-b0-qdt">
firstItem
(或secondItem
)值以对应新对象的正确ID后,旧项目的xml可以完全删除