Reputation: 358
I am trying to draw a string in a UIView.
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
let anotheR: anotherView = anotherView(frame: view.bounds)
view.backgroundColor = UIColor.yellow
view.addSubview(anotheR)
anotheR.backgroundColor = UIColor.lightGray
anotheR.draw(CGRect(x: 100, y: 300, width: 50, height: 10))
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
class anotherView: UIView {
override func draw(_ rect: CGRect) {
let suprect = rect
var string = "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s." as NSString
string.draw(in: rect, withAttributes: [NSForegroundColorAttributeName: UIColor.red, NSFontAttributeName: UIFont.systemFont(ofSize: 24)])
}
}
So there is a view and I overrode UIViews function draw(in:) to write a string in a view. So it writes a string but not it specified rectangle (CGRect(x: 100, y: 300, width: 50, height: 10)) . It just draw it in CGrect(x:0,y:0,width: frame.width, height: frame.height). So it changes rect by itself during runtime.
Here it is:
1) programm begins to call anotheR.draw(CGRect(x: 100, y: 300, width: 50, height: 10)) method.
2) CGRect somehow changes to CGRect(x:0,y:0,width: frame.width, height: frame.height)
Please maybe someone knows whats happen? It exposed all code I had wrote. Thank you!
Upvotes: 0
Views: 291
Reputation: 5052
The solution from SK_khan is correct. In case if you like to keep your anotherView bound same with controller view bound, you can choose to set the CGRect hard value inside your draw method like this.
string.draw(in: CGRect(x: 100, y: 300, width: 50, height: 10), withAttributes: [NSAttributedStringKey.foregroundColor: UIColor.red, NSAttributedStringKey.font: UIFont.systemFont(ofSize: 24)])
Upvotes: 1
Reputation: 100549
Actually drawRect captures the frame of the view and draws according to it's dimensions , you should not call it explicitly , You only need to specify this line
let anotheR: anotherView = anotherView(frame: view.bounds)
Or change it to
let anotheR: anotherView = anotherView(frame:CGRect(x: 100, y: 300, width: 50, height: 10))
Also give it a suitable width and height 50 , 10 respectively are not sufficient to display such long text
Upvotes: 0