目标:我想旋转并翻转eq 'Yes'
。 (为什么:查看我的previous question)
问题:如果直接在multipleCounty
上进行转换,文本布局会因某种未知原因而混乱。
解决方案:将UITextView
放入UITextView
容器中,然后对容器进行转换。
新问题:轮播视图上的自动布局(或任何类型的布局)变为a major headache。
建议的解决方案:创建UITextView
的子类,作为旋转和翻转的UIView
的附加容器。然后,自动布局应该在此自定义视图上工作。
当所有内容首次出现时都有效(UIView
有黄色背景):
但是当方向发生变化时,会发生以下情况(蓝色是子类化的UIView
背景,在IB中设置):
如果我禁用UITextView
行,则旋转容器视图(红色)会自行重新定位,即使在方向更改时也是如此:
所以问题必须在于我添加UIView
的位置。但是我该怎么做呢?
rotationView.addSubview(textView)
虽然我目前在这里碰壁,但我的下一个计划是覆盖UITextView
来进行转换。不过,这不是我的第一选择,因为这样做可能会降低性能。
答案 0 :(得分:6)
问题中代码的问题似乎是转换不断相互添加。为了解决这个问题,解决方案是每次都重置转换,即将其设置为身份转换。
rotationView.transform = CGAffineTransformIdentity
以下是显示关键部分的部分实现。
import UIKit
@IBDesignable class UIVerticalTextView: UIView {
var textView = UITextView()
let rotationView = UIView()
var underlyingTextView: UITextView {
get {
return textView
}
set {
textView = newValue
}
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
override init(frame: CGRect){
super.init(frame: frame)
self.setup()
}
override func awakeFromNib() {
super.awakeFromNib()
self.setup()
}
func setup() {
rotationView.backgroundColor = UIColor.redColor()
textView.backgroundColor = UIColor.yellowColor()
self.addSubview(rotationView)
rotationView.addSubview(textView)
// could also do this with auto layout constraints
textView.frame = rotationView.bounds
}
override func layoutSubviews() {
super.layoutSubviews()
rotationView.transform = CGAffineTransformIdentity // *** key line ***
rotationView.frame = CGRect(origin: CGPointZero, size: CGSize(width: self.bounds.height, height: self.bounds.width))
rotationView.transform = translateRotateFlip()
}
func translateRotateFlip() -> CGAffineTransform {
var transform = CGAffineTransformIdentity
// translate to new center
transform = CGAffineTransformTranslate(transform, (self.bounds.width / 2)-(self.bounds.height / 2), (self.bounds.height / 2)-(self.bounds.width / 2))
// rotate counterclockwise around center
transform = CGAffineTransformRotate(transform, CGFloat(-M_PI_2))
// flip vertically
transform = CGAffineTransformScale(transform, -1, 1)
return transform
}
}
我最近的实施最有可能在this github link中找到。
答案 1 :(得分:2)
在调试模式下检查您的宽度和高度。我猜他们在轮换前后都是一样的。这样就可以获得截图了。
第二件事是你应用转换两次。
你有旋转视图 - >你申请转型 - >你改变手机旋转框架 - >之前的转换仍然适用 - >然后你应用另一个转换。 也许你的答案就在这里。
编辑:
可行的解决方案:
你可以检测到你的女巫取向
UIInterfaceOrientation orientation = [UIApplication sharedApplication].statusBarOrientation;
if(orientation == 0) //Default orientation
//UI is in Default (Portrait) -- this is really a just a failsafe.
else if(orientation == UIInterfaceOrientationPortrait)
//Do something if the orientation is in Portrait
else if(orientation == UIInterfaceOrientationLandscapeLeft)
// Do something if Left
else if(orientation == UIInterfaceOrientationLandscapeRight)
然后决定如何处理这个问题。
如果方向是纵向而不是你拍摄
width = self.bound.size.width;
height = self.bound.size.height;
如果不是
height = self.bound.size.width;
width = self.bound.size.height;