gpt4 book ai didi

ios - Swift - 带约束的圆形 UIImageView

转载 作者:行者123 更新时间:2023-11-28 10:18:52 30 4
gpt4 key购买 nike

我有一个简单的 View Controller ,我想在其中放置一个圆形 ImageView 。(我根本不使用 Storyboard ,我想以编程方式处理所有内容)但是,无论我做什么, ImageView 都是方形的。

class DetailViewController: UIViewController{

// MARK: - Controls
var imageView:UIImageView!;
var label:UILabel = UILabel();
var button:UIButton = UIButton();
var close:UIButton = UIButton();

// MARK: - Fields
var person: Person!;

// MARK: - Constructors
init(person: Person) {
super.init(nibName: nil, bundle: nil);

self.person = person;
self.view.backgroundColor = UIColor.whiteColor();
}

required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}

override func viewDidLoad() {
super.viewDidLoad();

self.imageView = UIImageView();
self.imageView.image = person.picture;
self.imageView.translatesAutoresizingMaskIntoConstraints = false;
self.imageView.contentMode = .ScaleAspectFill;
self.view.addSubview(self.imageView);

self.label.translatesAutoresizingMaskIntoConstraints = false;
self.label.text = person.name;
self.label.sizeToFit();
self.view.addSubview(self.label);

self.button.setTitle("Open Webview", forState: .Normal);
self.button.setTitleColor(UIColor.whiteColor(), forState: .Normal);
self.button.backgroundColor = UIColor.grayColor();
self.button.translatesAutoresizingMaskIntoConstraints = false;
self.button.addTarget(self, action: #selector(DetailViewController.open), forControlEvents: .TouchUpInside);
self.view.addSubview(self.button);

self.close.setTitle("Close", forState: .Normal);
self.close.setTitleColor(UIColor.blueColor(), forState: .Normal);
self.close.backgroundColor = UIColor.clearColor();
self.close.translatesAutoresizingMaskIntoConstraints = false;
self.close.addTarget(self, action: #selector(DetailViewController.closeView), forControlEvents: .TouchUpInside);
self.view.addSubview(self.close);
self.close.alpha = 0;
if( UIDevice.currentDevice().userInterfaceIdiom == .Pad) {
self.close.alpha = 1;
}

// Center constraint
self.view.addConstraint(NSLayoutConstraint(item: button, attribute: .CenterX, relatedBy: .Equal, toItem: self.view, attribute: .CenterX, multiplier: 1, constant: 0));
self.view.addConstraint(NSLayoutConstraint(item: label, attribute: .CenterX, relatedBy: .Equal, toItem: self.view, attribute: .CenterX, multiplier: 1, constant: 0));
self.view.addConstraint(NSLayoutConstraint(item: imageView, attribute: .CenterX, relatedBy: .Equal, toItem: self.view, attribute: .CenterX, multiplier: 1, constant: 0));

// position order constraint
self.view.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:|-20-[close(40)]-60-[imageView(150)]-20-[nameLabel(40)]-35-[button(40)]", options: NSLayoutFormatOptions(rawValue:0), metrics: nil, views: ["close" : close,"imageView" : imageView, "nameLabel" : label, "button" : button]));

//width constaints
self.view.addConstraint(NSLayoutConstraint(item: button, attribute: .Width, relatedBy: .Equal, toItem: self.view, attribute: .Width, multiplier: 0.5, constant: 0));
self.view.addConstraint(NSLayoutConstraint(item: imageView, attribute: .Width, relatedBy: .Equal, toItem: imageView, attribute: .Height, multiplier: 1, constant: 0));
self.view.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:[close(60)]-20-|", options: NSLayoutFormatOptions(rawValue:0), metrics: nil, views: ["close" : close]));
}

override func viewWillAppear(animated: Bool) {
super.viewWillAppear(false);
let dSize: CGFloat = min(imageView.frame.height, imageView.frame.width)
imageView.bounds = CGRectMake(0, 0, dSize, dSize) // centered in container you want to use bounds over frame for this scenario
imageView.layer.cornerRadius = dSize/2.0
imageView.layer.masksToBounds = true;
imageView.layer.borderWidth = 3.0
imageView.layer.borderColor = UIColor.redColor().CGColor
}

override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}

func open() {

if( UIDevice.currentDevice().userInterfaceIdiom == .Pad) {
self.presentViewController(WebViewController(url: self.person.url), animated: false, completion: nil);
} else {
self.presentViewController(WebViewController(url: self.person.url), animated: true, completion: nil);
}
}

func closeView() {
self.dismissViewControllerAnimated(true, completion: nil);
}

}

如果我使用框架而不是约束,效果会很好,但我想在学习时使用约束。

有人可以给我指路吗?

提前致谢!

最佳答案

    let dSize: CGFloat = min(imageView.frame.height, imageView.frame.width)
imageView.bounds = CGRectMake(0, 0, dSize, dSize) // centered in container you want to use bounds over frame for this scenario
imageView.layer.cornerRadius = dSize/2.0`

viewWillLayoutSubviews

关于ios - Swift - 带约束的圆形 UIImageView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37464166/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com