원에 불과한 사용자 정의 UI뷰 그리는 방법 - 아이폰 앱
말 그대로 공(2D 원)에 불과한 사용자 지정 UI 뷰를 어떻게 그릴 수 있습니까?drawRect 메서드를 재정의하면 됩니까?그리고 누가 파란색 원을 그리는 코드를 보여줄 수 있나요?
또한 클래스 자체 내에서 해당 뷰의 프레임을 변경해도 괜찮습니까?아니면 프레임을 다른 클래스에서 변경해야 합니까?
(그냥 공을 튕기려고 하는 것)
Quartz Core를 사용하여 다음과 같은 작업을 수행할 수 있습니다.
self.circleView = [[UIView alloc] initWithFrame:CGRectMake(10,20,100,100)];
self.circleView.alpha = 0.5;
self.circleView.layer.cornerRadius = 50; // half the width/height
self.circleView.backgroundColor = [UIColor blueColor];
drawRect 메서드를 재정의하면 됩니까?
예:
- (void)drawRect:(CGRect)rect
{
CGContextRef ctx = UIGraphicsGetCurrentContext();
CGContextAddEllipseInRect(ctx, rect);
CGContextSetFillColor(ctx, CGColorGetComponents([[UIColor blueColor] CGColor]));
CGContextFillPath(ctx);
}
또한 클래스 자체 내에서 해당 뷰의 프레임을 변경해도 괜찮습니까?
이상적으로 그렇지는 않지만, 할 수 있습니다.
아니면 프레임을 다른 클래스에서 변경해야 합니까?
저는 부모님이 그것을 통제하도록 할 것입니다.
다음은 UIBeezierPath를 사용하는 또 다른 방법입니다(너무 늦었을 수도 있음 ^^) 다음과 같이 원을 만들고 UIView를 마스크합니다.
UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 200, 200)];
view.backgroundColor = [UIColor blueColor];
CAShapeLayer *shape = [CAShapeLayer layer];
UIBezierPath *path = [UIBezierPath bezierPathWithArcCenter:view.center radius:(view.bounds.size.width / 2) startAngle:0 endAngle:(2 * M_PI) clockwise:YES];
shape.path = path.CGPath;
view.layer.mask = shape;
Swift 확장에 대한 저의 기여:
extension UIView {
func asCircle() {
self.layer.cornerRadius = self.frame.width / 2;
self.layer.masksToBounds = true
}
}
그냥 전화하세요.myView.asCircle()
Swift 3 - 커스텀 클래스, 재사용이 용이함.그것은 사용합니다.backgroundColorUI 작성기로 설정
import UIKit
@IBDesignable
class CircleBackgroundView: UIView {
override func layoutSubviews() {
super.layoutSubviews()
layer.cornerRadius = bounds.size.width / 2
layer.masksToBounds = true
}
}
스위프트 3 클래스:
import UIKit
class CircleView: UIView {
override func draw(_ rect: CGRect) {
guard let context = UIGraphicsGetCurrentContext() else {return}
context.addEllipse(in: rect)
context.setFillColor(UIColor.blue.cgColor)
context.fillPath()
}
}
원(및 다른 모양) 그리기에 접근하는 또 다른 방법은 마스크를 사용하는 것입니다.원을 그리거나 다른 모양을 그리거나, 필요한 모양의 마스크를 만들고, 두 번째는 색의 사각형을 만들고, 세 번째는 색의 사각형에 마스크를 적용합니다.마스크나 색상을 변경하여 새 사용자 정의 원 또는 다른 모양을 얻을 수 있습니다.
#import <QuartzCore/QuartzCore.h>
@interface ViewController ()
@property (weak, nonatomic) IBOutlet UIView *area1;
@property (weak, nonatomic) IBOutlet UIView *area2;
@property (weak, nonatomic) IBOutlet UIView *area3;
@property (weak, nonatomic) IBOutlet UIView *area4;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
self.area1.backgroundColor = [UIColor blueColor];
[self useMaskFor: self.area1];
self.area2.backgroundColor = [UIColor orangeColor];
[self useMaskFor: self.area2];
self.area3.backgroundColor = [UIColor colorWithRed: 1.0 green: 0.0 blue: 0.5 alpha:1.0];
[self useMaskFor: self.area3];
self.area4.backgroundColor = [UIColor colorWithRed: 1.0 green: 0.0 blue: 0.5 alpha:0.5];
[self useMaskFor: self.area4];
}
- (void)useMaskFor: (UIView *)colorArea {
CALayer *maskLayer = [CALayer layer];
maskLayer.frame = colorArea.bounds;
UIImage *maskImage = [UIImage imageNamed:@"cirMask.png"];
maskLayer.contents = (__bridge id)maskImage.CGImage;
colorArea.layer.mask = maskLayer;
}
@end
다음은 위의 코드 출력입니다.
게으른 사람들을 위한 또 다른 대안이 있습니다.설정할 수 있습니다.layer.cornerRadius 인터페이스 작성기에서 사용자의 보기에 대한 키 경로입니다.예를 들어, 뷰의 너비 = 높이가 48인 경우 설정layer.cornerRadius = 24:
그러나 정적 크기의 보기가 있는 경우에만 작동합니다.(width/height is fixed)인터페이스 빌더에 원이 표시되지 않습니다.
Swift 3 - Xcode 8.1
@IBOutlet weak var myView: UIView!
override func viewDidLoad() {
super.viewDidLoad()
let size:CGFloat = 35.0
myView.bounds = CGRect(x: 0, y: 0, width: size, height: size)
myView.layer.cornerRadius = size / 2
myView.layer.borderWidth = 1
myView.layer.borderColor = UIColor.Gray.cgColor
}
언급URL : https://stackoverflow.com/questions/6589265/how-to-draw-a-custom-uiview-that-is-just-a-circle-iphone-app
'programing' 카테고리의 다른 글
| Postgre의 현재 연결 수를 가져오는 오른쪽 쿼리SQL DB (0) | 2023.05.29 |
|---|---|
| 기록이 있는 SVN 저장소를 새 Git 저장소로 마이그레이션하려면 어떻게 해야 합니까? (0) | 2023.05.29 |
| Node.js에서 module.exports를 여러 개 선언합니다. (0) | 2023.05.29 |
| 양식 제출 후 재쿼리 콜백을 수행하는 방법은 무엇입니까? (0) | 2023.05.29 |
| iTunes Connect의 "버전 번호", Xcode의 "번들 버전", "번들 버전 문자열"의 차이점은 무엇입니까? (0) | 2023.05.29 |

