How to make a circular UIView

前端 未结 7 1437
伪装坚强ぢ
伪装坚强ぢ 2020-11-28 04:05

I want to make a UIView or UIImageView that is a circle. Or a circle that i can change the size of using a slider, and the color of with a pickerview.

相关标签:
7条回答
  • 2020-11-28 04:07

    A neat, clean and elegant solution is to make a class called RoundedUIView and select it as your UIView element's custom class in Xcode's Identity Inspector like shown in the attached screenshot.

    import UIKit
    
    @IBDesignable public class RoundedUIView: UIView {
    
        override public func layoutSubviews() {
            super.layoutSubviews()
    
            self.layer.cornerRadius = self.frame.width / 2;
            self.layer.masksToBounds = true
        }
    }
    

    I needed to display multiple coloured icons on various screens on white background since the app itself has green theme. So I put my UIImgeView on top of RoundedUIView to make them look like this:

    0 讨论(0)
  • 2020-11-28 04:16

    No need for graphics calls. Just set the corner radius to the width / 2. This can be done on any visual object ie UI element

    0 讨论(0)
  • 2020-11-28 04:17

    As mentioned in some comments, @IBDesignable makes this much easier now, so you can use Interface Builder to configure your rounded UIImageView.

    First create a class named RoundedImageView.swift and paste this code to it:

    import UIKit
    
    @IBDesignable public class RoundedImageView: UIImageView {
    
        override public func layoutSubviews() {
            super.layoutSubviews()
    
            //hard-coded this since it's always round
            layer.cornerRadius = 0.5 * bounds.size.width
        }
    }
    

    Select the UIImageView in InterfaceBuilder and change the class from UIImageView to the custom RoundedImageView:

    Set Clip to Bounds to true (or the pic will extend beyond the circle):

    It should now round itself right there in InterfaceBuilder, which is pretty nifty. Be sure to set the width and height to the same values or it'll be shaped like a zeppelin!

    0 讨论(0)
  • 2020-11-28 04:17
    // For those looking to round the corners of an image view
    imageView.layer.cornerRadius = imageView.bounds.size.width/2;
    imageView.layer.masksToBounds = YES;
    
    0 讨论(0)
  • 2020-11-28 04:27

    I can at least show you a shortcut for drawing circles of arbitrary size. No OpenGL, no Core Graphics drawing needed.

    Import the QuartzCore framework to get access to the .cornerRadius property of your UIView or UIImageView.

    #import <QuartzCore/QuartzCore.h>
    

    Also manually add it to your project's Frameworks folder.

    Add this method to your view controller or wherever you need it:

    -(void)setRoundedView:(UIImageView *)roundedView toDiameter:(float)newSize;
    {
        CGPoint saveCenter = roundedView.center;
        CGRect newFrame = CGRectMake(roundedView.frame.origin.x, roundedView.frame.origin.y, newSize, newSize);
        roundedView.frame = newFrame;
        roundedView.layer.cornerRadius = newSize / 2.0;
        roundedView.center = saveCenter;
    }
    

    To use it, just pass it a UIImageView and a diameter. This example assumes you have a UIImageView named "circ" added as a subview to your view. It should have a backgroundColor set so you can see it.

    circ.clipsToBounds = YES;
    [self setRoundedView:circ toDiameter:100.0];
    

    This just handles UIImageViews but you can generalize it to any UIView.

    NOTE: Since iOS 7, clipToBounds need to YES.

    0 讨论(0)
  • 2020-11-28 04:28

    You need to make a transparent UIView (background color alpha of 0), and then, in its drawRect:, draw your circle using CoreGraphics calls. You could also edit the view's layer, and give it a cornerRadius.

    0 讨论(0)
提交回复
热议问题