আমার প্রশ্ন শিরোনাম হয়।
আমি জানি না কীভাবে কোনও নির্দিষ্ট দিকে, উপরে বা নীচে, কোনও দিকে কোনও
layer.border
সীমানা যুক্ত করা যায় ... পুরো দৃষ্টির জন্য সীমানাটি আঁকুন ...
আমার প্রশ্ন শিরোনাম হয়।
আমি জানি না কীভাবে কোনও নির্দিষ্ট দিকে, উপরে বা নীচে, কোনও দিকে কোনও
layer.border
সীমানা যুক্ত করা যায় ... পুরো দৃষ্টির জন্য সীমানাটি আঁকুন ...
উত্তর:
আমি এখানে সাবক্লাসিং UIView
এবং ওভাররাইডিং drawRect
ওভারকিল বিবেচনা করি । কেন একটি এক্সটেনশান UIView
যুক্ত এবং সীমান্ত সংক্ষিপ্তসার যুক্ত করবেন না?
@discardableResult
func addBorders(edges: UIRectEdge,
color: UIColor,
inset: CGFloat = 0.0,
thickness: CGFloat = 1.0) -> [UIView] {
var borders = [UIView]()
@discardableResult
func addBorder(formats: String...) -> UIView {
let border = UIView(frame: .zero)
border.backgroundColor = color
border.translatesAutoresizingMaskIntoConstraints = false
addSubview(border)
addConstraints(formats.flatMap {
NSLayoutConstraint.constraints(withVisualFormat: $0,
options: [],
metrics: ["inset": inset, "thickness": thickness],
views: ["border": border]) })
borders.append(border)
return border
}
if edges.contains(.top) || edges.contains(.all) {
addBorder(formats: "V:|-0-[border(==thickness)]", "H:|-inset-[border]-inset-|")
}
if edges.contains(.bottom) || edges.contains(.all) {
addBorder(formats: "V:[border(==thickness)]-0-|", "H:|-inset-[border]-inset-|")
}
if edges.contains(.left) || edges.contains(.all) {
addBorder(formats: "V:|-inset-[border]-inset-|", "H:|-0-[border(==thickness)]")
}
if edges.contains(.right) || edges.contains(.all) {
addBorder(formats: "V:|-inset-[border]-inset-|", "H:[border(==thickness)]-0-|")
}
return borders
}
// Usage:
view.addBorder(edges: [.all]) // All with default arguments
view.addBorder(edges: [.top], color: .green) // Just Top, green, default thickness
view.addBorder(edges: [.left, .right, .bottom], color: .red, thickness: 3) // All except Top, red, thickness 3
এই কোডের সাহায্যে আপনিও আপনার সাবক্লাসের সাথে আবদ্ধ নন, আপনি যে কোনও কিছুতে এবং উত্তরাধিকার সূত্রে প্রাপ্ত সমস্ত কিছুতে UIView
- আপনার প্রকল্পে পুনরায় ব্যবহারযোগ্য এবং অন্য যে কোনওটিতে এটি প্রয়োগ করতে পারেন । অন্যান্য রং এবং প্রস্থকে সংজ্ঞায়িত করতে আপনার পদ্ধতিগুলিতে অন্যান্য যুক্তিতে পাস করুন। অনেক বিকল্প।
গোলাকার কোণগুলির জন্য অ্যাডাম ওয়েটের মূল পোস্টে এবং একাধিক সম্পাদনাগুলির জন্য ক্ষমতা যুক্ত করা হয়েছে
গুরুত্বপূর্ণ !: ঠিক আগের হিসাবে মন্তব্য হিসাবে 'অ্যাডবোর্ডার' কল করার আগে ঠিক 'লেবেল.ইলআউটআইফনেড ()' যুক্ত করতে ভুলবেন না
দ্রষ্টব্য: আমি এটি কেবল ইউআইএলবেলে পরীক্ষা করেছি।
এক্সটেনশন CALayer
enum BorderSide {
case top
case right
case bottom
case left
case notRight
case notLeft
case topAndBottom
case all
}
enum Corner {
case topLeft
case topRight
case bottomLeft
case bottomRight
}
func addBorder(side: BorderSide, thickness: CGFloat, color: CGColor, maskedCorners: CACornerMask? = nil) {
var topWidth = frame.size.width; var bottomWidth = topWidth
var leftHeight = frame.size.height; var rightHeight = leftHeight
var topXOffset: CGFloat = 0; var bottomXOffset: CGFloat = 0
var leftYOffset: CGFloat = 0; var rightYOffset: CGFloat = 0
// Draw the corners and set side offsets
switch maskedCorners {
case [.layerMinXMinYCorner, .layerMaxXMinYCorner]: // Top only
addCorner(.topLeft, thickness: thickness, color: color)
addCorner(.topRight, thickness: thickness, color: color)
topWidth -= cornerRadius*2
leftHeight -= cornerRadius; rightHeight -= cornerRadius
topXOffset = cornerRadius; leftYOffset = cornerRadius; rightYOffset = cornerRadius
case [.layerMinXMaxYCorner, .layerMaxXMaxYCorner]: // Bottom only
addCorner(.bottomLeft, thickness: thickness, color: color)
addCorner(.bottomRight, thickness: thickness, color: color)
bottomWidth -= cornerRadius*2
leftHeight -= cornerRadius; rightHeight -= cornerRadius
bottomXOffset = cornerRadius
case [.layerMinXMinYCorner, .layerMinXMaxYCorner]: // Left only
addCorner(.topLeft, thickness: thickness, color: color)
addCorner(.bottomLeft, thickness: thickness, color: color)
topWidth -= cornerRadius; bottomWidth -= cornerRadius
leftHeight -= cornerRadius*2
leftYOffset = cornerRadius; topXOffset = cornerRadius; bottomXOffset = cornerRadius;
case [.layerMaxXMinYCorner, .layerMaxXMaxYCorner]: // Right only
addCorner(.topRight, thickness: thickness, color: color)
addCorner(.bottomRight, thickness: thickness, color: color)
topWidth -= cornerRadius; bottomWidth -= cornerRadius
rightHeight -= cornerRadius*2
rightYOffset = cornerRadius
case [.layerMaxXMinYCorner, .layerMaxXMaxYCorner, // All
.layerMinXMaxYCorner, .layerMinXMinYCorner]:
addCorner(.topLeft, thickness: thickness, color: color)
addCorner(.topRight, thickness: thickness, color: color)
addCorner(.bottomLeft, thickness: thickness, color: color)
addCorner(.bottomRight, thickness: thickness, color: color)
topWidth -= cornerRadius*2; bottomWidth -= cornerRadius*2
topXOffset = cornerRadius; bottomXOffset = cornerRadius
leftHeight -= cornerRadius*2; rightHeight -= cornerRadius*2
leftYOffset = cornerRadius; rightYOffset = cornerRadius
default: break
}
// Draw the sides
switch side {
case .top:
addLine(x: topXOffset, y: 0, width: topWidth, height: thickness, color: color)
case .right:
addLine(x: frame.size.width - thickness, y: rightYOffset, width: thickness, height: rightHeight, color: color)
case .bottom:
addLine(x: bottomXOffset, y: frame.size.height - thickness, width: bottomWidth, height: thickness, color: color)
case .left:
addLine(x: 0, y: leftYOffset, width: thickness, height: leftHeight, color: color)
// Multiple Sides
case .notRight:
addLine(x: topXOffset, y: 0, width: topWidth, height: thickness, color: color)
addLine(x: 0, y: leftYOffset, width: thickness, height: leftHeight, color: color)
addLine(x: bottomXOffset, y: frame.size.height - thickness, width: bottomWidth, height: thickness, color: color)
case .notLeft:
addLine(x: topXOffset, y: 0, width: topWidth, height: thickness, color: color)
addLine(x: frame.size.width - thickness, y: rightYOffset, width: thickness, height: rightHeight, color: color)
addLine(x: bottomXOffset, y: frame.size.height - thickness, width: bottomWidth, height: thickness, color: color)
case .topAndBottom:
addLine(x: topXOffset, y: 0, width: topWidth, height: thickness, color: color)
addLine(x: bottomXOffset, y: frame.size.height - thickness, width: bottomWidth, height: thickness, color: color)
case .all:
addLine(x: topXOffset, y: 0, width: topWidth, height: thickness, color: color)
addLine(x: frame.size.width - thickness, y: rightYOffset, width: thickness, height: rightHeight, color: color)
addLine(x: bottomXOffset, y: frame.size.height - thickness, width: bottomWidth, height: thickness, color: color)
addLine(x: 0, y: leftYOffset, width: thickness, height: leftHeight, color: color)
}
}
private func addLine(x: CGFloat, y: CGFloat, width: CGFloat, height: CGFloat, color: CGColor) {
let border = CALayer()
border.frame = CGRect(x: x, y: y, width: width, height: height)
border.backgroundColor = color
addSublayer(border)
}
private func addCorner(_ corner: Corner, thickness: CGFloat, color: CGColor) {
// Set default to top left
let width = frame.size.width; let height = frame.size.height
var x = cornerRadius
var startAngle: CGFloat = .pi; var endAngle: CGFloat = .pi*3/2
switch corner {
case .bottomLeft: startAngle = .pi/2; endAngle = .pi
case .bottomRight:
x = width - cornerRadius
startAngle = 0; endAngle = .pi/2
case .topRight:
x = width - cornerRadius
startAngle = .pi*3/2; endAngle = 0
default: break
}
let cornerPath = UIBezierPath(arcCenter: CGPoint(x: x, y: height / 2),
radius: cornerRadius - thickness,
startAngle: startAngle,
endAngle: endAngle,
clockwise: true)
let cornerShape = CAShapeLayer()
cornerShape.path = cornerPath.cgPath
cornerShape.lineWidth = thickness
cornerShape.strokeColor = color
cornerShape.fillColor = nil
addSublayer(cornerShape)
}
}
view.layoutIfNeeded()
কল করার আগে ডান যুক্ত করতে হবে view.layer.addBorder(...)
। তারপরে এটি সুইফট 3
override func viewDidLayoutSubviews()
আমার জন্য সর্বোত্তম adding views
উপায়টি ইউআইভিউ- তে একটি বিভাগ, তবে ক্যালায়ারগুলির পরিবর্তে, তাই আমরা take advantage of AutoresizingMasks
নিশ্চিত করতে পারি যে তদারকির পাশাপাশি বর্ডারগুলির পুনরায় আকার তৈরি করা যায়।
উদ্দেশ্য গ
- (void)addTopBorderWithColor:(UIColor *)color andWidth:(CGFloat) borderWidth {
UIView *border = [UIView new];
border.backgroundColor = color;
[border setAutoresizingMask:UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleBottomMargin];
border.frame = CGRectMake(0, 0, self.frame.size.width, borderWidth);
[self addSubview:border];
}
- (void)addBottomBorderWithColor:(UIColor *)color andWidth:(CGFloat) borderWidth {
UIView *border = [UIView new];
border.backgroundColor = color;
[border setAutoresizingMask:UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleTopMargin];
border.frame = CGRectMake(0, self.frame.size.height - borderWidth, self.frame.size.width, borderWidth);
[self addSubview:border];
}
- (void)addLeftBorderWithColor:(UIColor *)color andWidth:(CGFloat) borderWidth {
UIView *border = [UIView new];
border.backgroundColor = color;
border.frame = CGRectMake(0, 0, borderWidth, self.frame.size.height);
[border setAutoresizingMask:UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleRightMargin];
[self addSubview:border];
}
- (void)addRightBorderWithColor:(UIColor *)color andWidth:(CGFloat) borderWidth {
UIView *border = [UIView new];
border.backgroundColor = color;
[border setAutoresizingMask:UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleLeftMargin];
border.frame = CGRectMake(self.frame.size.width - borderWidth, 0, borderWidth, self.frame.size.height);
[self addSubview:border];
}
সুইফট 5
func addTopBorder(with color: UIColor?, andWidth borderWidth: CGFloat) {
let border = UIView()
border.backgroundColor = color
border.autoresizingMask = [.flexibleWidth, .flexibleBottomMargin]
border.frame = CGRect(x: 0, y: 0, width: frame.size.width, height: borderWidth)
addSubview(border)
}
func addBottomBorder(with color: UIColor?, andWidth borderWidth: CGFloat) {
let border = UIView()
border.backgroundColor = color
border.autoresizingMask = [.flexibleWidth, .flexibleTopMargin]
border.frame = CGRect(x: 0, y: frame.size.height - borderWidth, width: frame.size.width, height: borderWidth)
addSubview(border)
}
func addLeftBorder(with color: UIColor?, andWidth borderWidth: CGFloat) {
let border = UIView()
border.backgroundColor = color
border.frame = CGRect(x: 0, y: 0, width: borderWidth, height: frame.size.height)
border.autoresizingMask = [.flexibleHeight, .flexibleRightMargin]
addSubview(border)
}
func addRightBorder(with color: UIColor?, andWidth borderWidth: CGFloat) {
let border = UIView()
border.backgroundColor = color
border.autoresizingMask = [.flexibleHeight, .flexibleLeftMargin]
border.frame = CGRect(x: frame.size.width - borderWidth, y: 0, width: borderWidth, height: frame.size.height)
addSubview(border)
}
সুইফট 3.0
সুইফট 4.1
extension CALayer {
func addBorder(edge: UIRectEdge, color: UIColor, thickness: CGFloat) {
let border = CALayer()
switch edge {
case UIRectEdge.top:
border.frame = CGRect(x: 0, y: 0, width: frame.width, height: thickness)
case UIRectEdge.bottom:
border.frame = CGRect(x:0, y: frame.height - thickness, width: frame.width, height:thickness)
case UIRectEdge.left:
border.frame = CGRect(x:0, y:0, width: thickness, height: frame.height)
case UIRectEdge.right:
border.frame = CGRect(x: frame.width - thickness, y: 0, width: thickness, height: frame.height)
default: do {}
}
border.backgroundColor = color.cgColor
addSublayer(border)
}
}
উপশ্রেণী UIView
এবং বাস্তবায়ন drawRect:
আপনার উপশ্রেণী যেমন দেখুন:
উদ্দেশ্য গ
- (void)drawRect:(CGRect)rect {
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextMoveToPoint(context, CGRectGetMinX(rect), CGRectGetMinY(rect));
CGContextAddLineToPoint(context, CGRectGetMaxX(rect), CGRectGetMinY(rect));
CGContextSetStrokeColorWithColor(context, [[UIColor redColor] CGColor] );
CGContextSetLineWidth(context, 2.0);
CGContextStrokePath(context);
}
সুইফট 4
override func draw(_ rect: CGRect) {
let cgContext = UIGraphicsGetCurrentContext()
cgContext?.move(to: CGPoint(x: rect.minX, y: rect.minY))
cgContext?.addLine(to: CGPoint(x: rect.maxX, y: rect.minY))
cgContext?.setStrokeColor(UIColor.red.cgColor)
cgContext?.setLineWidth(2.0)
cgContext?.strokePath()
}
এটি শীর্ষ সীমানা হিসাবে 2 পিক্সেল লাল রেখা আঁকবে। আপনি যে অন্যান্য বিভিন্ন প্রকারের উল্লেখ করেছেন তার সবগুলিই পাঠকের জন্য তুচ্ছ অনুশীলন হিসাবে রেখে গেছে।
কোয়ার্টজ 2 ডি প্রোগ্রামিং গাইড বাঞ্ছনীয়।
UIView
সাবক্লাসে এমন একটি সম্পত্তি থাকতে পারে যা নির্ধারণ করে যে কী সীমানা drawRect:
আঁকবে। এই বৈশিষ্ট্যটি NS_OPTIONS
এমনভাবে সংজ্ঞায়িত করা যেতে পারে যাতে এটি বিটমাস্কের মতো বিটমাস্ককে সংজ্ঞায়িত করে UIViewAutoresizing
। যদি - যে কোনও কারণেই - আপনি সত্যিই সাবক্লাসিংয়ের পক্ষে UIView
দৃ object়তার সাথে আপত্তি করেন তবে কেবল একটি ছোট 1-2 পিক্সেল উচ্চ (বা প্রশস্ত) সাবভিউ যুক্ত করুন এবং আপনি কোনও সীমানা অনুকরণ করতে চান এমন যে কোনও মাত্রা দিন।
নির্বাচিত উত্তরের জন্য কোড, যদি কেউ এটি চায়।
দ্রষ্টব্য: এটি অটোলেআউট (ওরফে, আড়াআড়ি ডিভাইস ল্যান্ডস্কেপ ইত্যাদিতে) এর সাথে কাজ করে না।
প্রথমে একটি বেধ নির্ধারণ করুন:
NSInteger borderThickness = 1;
তারপরে আপনি যে সীমানা সেট করতে চান তা সেট করতে কেবল এই যেকোন একটি বা সমস্ত ব্যবহার করুন copy
শীর্ষ সীমানা
UIView *topBorder = [UIView new];
topBorder.backgroundColor = [UIColor lightGrayColor];
topBorder.frame = CGRectMake(0, 0, myView.frame.size.width, borderThickness);
[myView addSubview:topBorder];
নীচে বর্ডার
UIView *bottomBorder = [UIView new];
bottomBorder.backgroundColor = [UIColor lightGrayColor];
bottomBorder.frame = CGRectMake(0, myView.frame.size.height - borderThickness, myView.frame.size.width, borderThickness);
[myView addSubview:bottomBorder];
বাম সীমানা
UIView *leftBorder = [UIView new];
leftBorder.backgroundColor = [UIColor lightGrayColor];
leftBorder.frame = CGRectMake(0, 0, borderThickness, myView.frame.size.height);
[myView addSubview:leftBorder];
ডান সীমানা
UIView *rightBorder = [UIView new];
rightBorder.backgroundColor = [UIColor lightGrayColor];
rightBorder.frame = CGRectMake(myView.frame.size.width - borderThickness, 0, borderThickness, myView.frame.size.height);
[myView addSubview:rightBorder];
পুরানো প্রশ্ন, তবে রানটাইম বর্ডার সামঞ্জস্য সহ অটোলেআউট-সলিউশন এখনও অনুপস্থিত।
borders(for: [.left, .bottom], width: 2, color: .red)
নিম্নলিখিত ইউআইভিউ এক্সটেনশান কেবল প্রদত্ত প্রান্তগুলিতে সীমানা যুক্ত করবে। আপনি রানটাইমের সময় প্রান্তগুলি পরিবর্তন করলে সীমানাগুলি সেই অনুযায়ী সামঞ্জস্য হবে।
extension UIView {
func borders(for edges:[UIRectEdge], width:CGFloat = 1, color: UIColor = .black) {
if edges.contains(.all) {
layer.borderWidth = width
layer.borderColor = color.cgColor
} else {
let allSpecificBorders:[UIRectEdge] = [.top, .bottom, .left, .right]
for edge in allSpecificBorders {
if let v = viewWithTag(Int(edge.rawValue)) {
v.removeFromSuperview()
}
if edges.contains(edge) {
let v = UIView()
v.tag = Int(edge.rawValue)
v.backgroundColor = color
v.translatesAutoresizingMaskIntoConstraints = false
addSubview(v)
var horizontalVisualFormat = "H:"
var verticalVisualFormat = "V:"
switch edge {
case UIRectEdge.bottom:
horizontalVisualFormat += "|-(0)-[v]-(0)-|"
verticalVisualFormat += "[v(\(width))]-(0)-|"
case UIRectEdge.top:
horizontalVisualFormat += "|-(0)-[v]-(0)-|"
verticalVisualFormat += "|-(0)-[v(\(width))]"
case UIRectEdge.left:
horizontalVisualFormat += "|-(0)-[v(\(width))]"
verticalVisualFormat += "|-(0)-[v]-(0)-|"
case UIRectEdge.right:
horizontalVisualFormat += "[v(\(width))]-(0)-|"
verticalVisualFormat += "|-(0)-[v]-(0)-|"
default:
break
}
self.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: horizontalVisualFormat, options: .directionLeadingToTrailing, metrics: nil, views: ["v": v]))
self.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: verticalVisualFormat, options: .directionLeadingToTrailing, metrics: nil, views: ["v": v]))
}
}
}
}
}
সুইফ্ট সংস্করণ:
var myView = UIView(frame: CGRect(x: 100, y: 100, width: 100, height: 100))
myView.backgroundColor = UIColor.yellowColor()
var border = CALayer()
border.backgroundColor = UIColor.lightGrayColor()
border.frame = CGRect(x: 0, y: 0, width: myView.frame.width, height: 0.5)
myView.layer.addSublayer(border)
সম্পাদনা: জন্য আপডেট সংস্করণ আমার রেপো এখানে চেক করুন: https://github.com/goktugyil/EZSwiftExtensions/blob/master/Sources/UIViewExtensions.swift
অ্যাডবোর্ডার অংশগুলি দেখুন
আমি অ্যাডাম ওয়েইট এবং পলস উভয় উত্তর নিয়েছিলাম এবং তাদের সংযুক্ত করেছি। আমি নির্বাচিত প্রান্তগুলি একসাথে পাইপ করার সম্ভাবনাও যুক্ত করেছি, সুতরাং আপনার কেবলমাত্র একটি ফাংশন কল করতে হবে:
[self.view addBordersToEdge:(UIRectEdgeLeft|UIRectEdgeRight)
withColor:[UIColor grayColor]
andWidth:1.0];
অথবা তাই:
[self.view addBordersToEdge:(UIRectEdgeAll)
withColor:[UIColor grayColor]
andWidth:1.0];
আপনার যা বাস্তবায়নের দরকার তা হ'ল ইউআইভিউ-র একটি বিভাগ যা নিম্নোক্ত প্রয়োগের সাথে অন্যান্য উত্তরে প্রস্তাবিত:
- (void)addBordersToEdge:(UIRectEdge)edge withColor:(UIColor *)color andWidth:(CGFloat) borderWidth {
if (edge & UIRectEdgeTop) {
UIView *border = [UIView new];
border.backgroundColor = color;
[border setAutoresizingMask:UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleBottomMargin];
border.frame = CGRectMake(0, 0, self.frame.size.width, borderWidth);
[self addSubview:border];
}
if (edge & UIRectEdgeLeft) {
UIView *border = [UIView new];
border.backgroundColor = color;
border.frame = CGRectMake(0, 0, borderWidth, self.frame.size.height);
[border setAutoresizingMask:UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleRightMargin];
[self addSubview:border];
}
if (edge & UIRectEdgeBottom) {
UIView *border = [UIView new];
border.backgroundColor = color;
[border setAutoresizingMask:UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleTopMargin];
border.frame = CGRectMake(0, self.frame.size.height - borderWidth, self.frame.size.width, borderWidth);
[self addSubview:border];
}
if (edge & UIRectEdgeRight) {
UIView *border = [UIView new];
border.backgroundColor = color;
[border setAutoresizingMask:UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleLeftMargin];
border.frame = CGRectMake(self.frame.size.width - borderWidth, 0, borderWidth, self.frame.size.height);
[self addSubview:border];
}
}
// মার্ক: - দেখার জন্য বাম সীমানা যুক্ত করুন
(void)prefix_addLeftBorder:(UIView *) viewName
{
CALayer *leftBorder = [CALayer layer];
leftBorder.backgroundColor = [UIColor colorWithRed:221/255.0f green:221/255.0f blue:221/255.0f alpha:1.0f].CGColor;
leftBorder.frame = CGRectMake(0,0,1.0,viewName.frame.size.height);
[viewName.layer addSublayer:leftBorder];
}
// মার্ক: - দেখার জন্য রাইটবোর্ডার যুক্ত করুন
(void)prefix_addRightBorder:(UIView *) viewName
{
CALayer *rightBorder = [CALayer layer];
rightBorder.backgroundColor = [UIColor colorWithRed:221/255.0f green:221/255.0f blue:221/255.0f alpha:1.0f].CGColor;
rightBorder.frame = CGRectMake(viewName.frame.size.width - 1.0,0,1.0,viewName.frame.size.height);
[viewName.layer addSublayer:rightBorder];
}
// মার্ক: - দেখার জন্য নীচে বর্ডার যুক্ত করুন
(void)prefix_addbottomBorder:(UIView *) viewName
{
CALayer *bottomBorder = [CALayer layer];
bottomBorder.backgroundColor = [UIColor colorWithRed:221/255.0f green:221/255.0f blue:221/255.0f alpha:1.0f].CGColor;
bottomBorder.frame = CGRectMake(0,viewName.frame.size.height - 1.0,viewName.frame.size.width,1.0);
[viewName.layer addSublayer:bottomBorder];
}
সুইফট 4.2 এবং অটোলআউট
আমি প্রস্তাবিত সমাধানগুলি দিয়ে গেলাম। অনেকগুলি ফ্রেমের উপর ভিত্তি করে তৈরি করা হয় এটি একটি সাধারণ এক্সটেনশন যা অটোলআউট সাথে কাজ করে - আমরা অটলাউট ব্যবহার করতে পারি তা নিশ্চিত করার জন্য স্তরটির পরিবর্তে ভিউ ব্যবহার করুন - 4 টি সীমাবদ্ধতার সাথে একক উপদর্শন
নিম্নলিখিত হিসাবে ব্যবহার করুন:
self.addBorder(.bottom, color: .lightGray, thickness: 0.5)
extension UIView {
func addBorder(_ edge: UIRectEdge, color: UIColor, thickness: CGFloat) {
let subview = UIView()
subview.translatesAutoresizingMaskIntoConstraints = false
subview.backgroundColor = color
self.addSubview(subview)
switch edge {
case .top, .bottom:
subview.leftAnchor.constraint(equalTo: self.leftAnchor, constant: 0).isActive = true
subview.rightAnchor.constraint(equalTo: self.rightAnchor, constant: 0).isActive = true
subview.heightAnchor.constraint(equalToConstant: thickness).isActive = true
if edge == .top {
subview.topAnchor.constraint(equalTo: self.topAnchor, constant: 0).isActive = true
} else {
subview.bottomAnchor.constraint(equalTo: self.bottomAnchor, constant: 0).isActive = true
}
case .left, .right:
subview.topAnchor.constraint(equalTo: self.topAnchor, constant: 0).isActive = true
subview.bottomAnchor.constraint(equalTo: self.bottomAnchor, constant: 0).isActive = true
subview.widthAnchor.constraint(equalToConstant: thickness).isActive = true
if edge == .left {
subview.leftAnchor.constraint(equalTo: self.leftAnchor, constant: 0).isActive = true
} else {
subview.rightAnchor.constraint(equalTo: self.rightAnchor, constant: 0).isActive = true
}
default:
break
}
}
}
আমি ড্যানের উত্তরে কিছু পরিবর্তন করেছি যাতে আমি একটি কমান্ড দিয়ে একাধিক প্রান্তে সীমানা যুক্ত করতে পারি:
infoView.addBorder(toEdges: [.left, .bottom, .right], color: borderColor, thickness: 1)
এখানে সম্পূর্ণ কোড:
extension UIView {
func addBorder(toEdges edges: UIRectEdge, color: UIColor, thickness: CGFloat) {
func addBorder(toEdge edges: UIRectEdge, color: UIColor, thickness: CGFloat) {
let border = CALayer()
border.backgroundColor = color.cgColor
switch edges {
case .top:
border.frame = CGRect(x: 0, y: 0, width: frame.width, height: thickness)
case .bottom:
border.frame = CGRect(x: 0, y: frame.height - thickness, width: frame.width, height: thickness)
case .left:
border.frame = CGRect(x: 0, y: 0, width: thickness, height: frame.height)
case .right:
border.frame = CGRect(x: frame.width - thickness, y: 0, width: thickness, height: frame.height)
default:
break
}
layer.addSublayer(border)
}
if edges.contains(.top) || edges.contains(.all) {
addBorder(toEdge: .top, color: color, thickness: thickness)
}
if edges.contains(.bottom) || edges.contains(.all) {
addBorder(toEdge: .bottom, color: color, thickness: thickness)
}
if edges.contains(.left) || edges.contains(.all) {
addBorder(toEdge: .left, color: color, thickness: thickness)
}
if edges.contains(.right) || edges.contains(.all) {
addBorder(toEdge: .right, color: color, thickness: thickness)
}
}
}
এনএসবামের জবাব বন্ধ করে দিয়ে , আমি একটি অনুরূপ পন্থা নিয়েছি এবং এই সাধারণ ইউআইভিউ সাবক্লাসটি তৈরি করেছি যাতে এটি ইন্টারফেস বিল্ডারে কাজ করে এবং সীমাবদ্ধতার সাথে কাজ করে:
গিথুব লিঙ্ক
সিজি কনটেক্সটফিলারেক্ট ব্যবহার করে সিজি কনটেক্সটস্ট্রোকপথের পরিবর্তে, আমি ভবিষ্যদ্বাণীগুলিকে সম্পূর্ণ দৃ solid় এবং ভিতরে রাখতে সক্ষম হয়েছি দেখার সীমানা।
এটি সম্পর্কে আমার ব্লগ পোস্টটি এখানে: http : //nat Microsoft.com/?p=55
- মূলত ইন্টারফেস বিল্ডারে একটি ইউআইভিউতে ফেলে দিন এবং তার শ্রেণীর ধরণটি NAUIViewWithB બોર્ડারে পরিবর্তন করুন।
- তারপরে আপনার ভিসির ভিউডিডলড এ জাতীয় কিছু করুন:
/* For a top border only ———————————————- */
self.myBorderView.borderColorTop = [UIColor redColor];
self.myBorderView..borderWidthsAll = 1.0f;
/* For borders with different colors and widths ————————— */
self.myBorderView.borderWidths = UIEdgeInsetsMake(2.0, 4.0, 6.0, 8.0);
self.myBorderView.borderColorTop = [UIColor blueColor];
self.myBorderView.borderColorRight = [UIColor redColor];
self.myBorderView.borderColorBottom = [UIColor greenColor];
self.myBorderView.borderColorLeft = [UIColor darkGrayColor];
এখানে .m ফাইলের প্রত্যক্ষ লিঙ্ক রয়েছে যাতে আপনি বাস্তবায়নটি দেখতে পারেন। পাশাপাশি একটি ডেমো প্রকল্প রয়েছে। আশা করি এটি কাউকে সাহায্য করবে :)
অনুরূপ প্রশ্নের আমার উত্তর: https://stackoverflow.com/a/27141956/435766 আমি ব্যক্তিগতভাবে সেটির উপরের বিভাগের রাস্তায় যেতে পছন্দ করি, যেহেতু আমি এটি ইউআইভিউর যে কোনও সাবক্লাসে ব্যবহার করতে সক্ষম হতে চাই।
extension UIView {
func addBorder(edge: UIRectEdge, color: UIColor, borderWidth: CGFloat) {
let seperator = UIView()
self.addSubview(seperator)
seperator.translatesAutoresizingMaskIntoConstraints = false
seperator.backgroundColor = color
if edge == .top || edge == .bottom
{
seperator.leadingAnchor.constraint(equalTo: self.leadingAnchor, constant: 0).isActive = true
seperator.trailingAnchor.constraint(equalTo: self.trailingAnchor, constant: 0).isActive = true
seperator.heightAnchor.constraint(equalToConstant: borderWidth).isActive = true
if edge == .top
{
seperator.topAnchor.constraint(equalTo: self.topAnchor, constant: 0).isActive = true
}
else
{
seperator.bottomAnchor.constraint(equalTo: self.bottomAnchor, constant: 0).isActive = true
}
}
else if edge == .left || edge == .right
{
seperator.topAnchor.constraint(equalTo: self.topAnchor, constant: 0).isActive = true
seperator.bottomAnchor.constraint(equalTo: self.bottomAnchor, constant: 0).isActive = true
seperator.widthAnchor.constraint(equalToConstant: borderWidth).isActive = true
if edge == .left
{
seperator.leadingAnchor.constraint(equalTo: self.leadingAnchor, constant: 0).isActive = true
}
else
{
seperator.trailingAnchor.constraint(equalTo: self.trailingAnchor, constant: 0).isActive = true
}
}
}
}
এখানে একটি সহজ সমাধান। আপনার উপর একটি লেবেল যুক্ত UIView
করুন, লেবেলের পাঠ্যটি সাফ করুন এবং লেবেল ব্যাকগ্রাউন্ডের রঙটিকে আপনার সীমানার রঙ হিসাবে সেট করুন। মূল সেট (x,y)
আপনার লেবেল উৎপত্তি হতে (x,y)
আপনার ভিউ করুন। এবং আপনার প্রস্থ হিসাবে লেবেলের প্রস্থকে UIView
সেট করুন, উচ্চতাটি 1 বা 2 হিসাবে সেট করুন (আপনার শীর্ষে আপনার সীমানা উচ্চতার জন্য UIView
)। এবং যে কৌশল করা উচিত।
সুইফট 3 সংস্করণ
extension UIView {
enum ViewSide {
case Top, Bottom, Left, Right
}
func addBorder(toSide side: ViewSide, withColor color: UIColor, andThickness thickness: CGFloat) {
let border = CALayer()
border.backgroundColor = color.cgColor
switch side {
case .Top:
border.frame = CGRect(x: 0, y: 0, width: frame.size.width, height: thickness)
case .Bottom:
border.frame = CGRect(x: 0, y: frame.size.height - thickness, width: frame.size.width, height: thickness)
case .Left:
border.frame = CGRect(x: 0, y: 0, width: thickness, height: frame.size.height)
case .Right:
border.frame = CGRect(x: frame.size.width - thickness, y: 0, width: thickness, height: frame.size.height)
}
layer.addSublayer(border)
}
}
সংশ্লিষ্ট সীমানা সেট করতে আপনার ডাইডলয়আউটসুভিউগুলি () পদ্ধতিটি ওভাররাইড করা উচিত :
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
yourView.addBorder(toSide: UIView.ViewSide.Top, withColor: UIColor.lightGray, andThickness: 1)
সীমানা যুক্ত করার সন্ধানে কাউকে সহায়তা করার জন্য এখানে কেবল পোস্ট করা। আমি স্বীকৃত উত্তরে এখানে কয়েকটি পরিবর্তন করেছি এখানে কেবল সুইফট লেবেলটি বাম সীমান্ত । ক্ষেত্রে প্রস্থ পরিবর্তিত UIRectEdge.Top
থেকে CGRectGetHeight(self.frame)
থেকে CGRectGetWidth(self.frame)
এবং ক্ষেত্রে UIRectEdge.Bottom
থেকে UIScreen.mainScreen().bounds.width
করতে CGRectGetWidth(self.frame)
সীমানা সঠিকভাবে জন্য। সুইফট 2 ব্যবহার করা।
শেষ পর্যন্ত এক্সটেনশনটি হ'ল:
extension CALayer {
func addBorder(edge: UIRectEdge, color: UIColor, thickness: CGFloat) {
let border = CALayer();
switch edge {
case UIRectEdge.Top:
border.frame = CGRectMake(0, 0, CGRectGetWidth(self.frame), thickness);
break
case UIRectEdge.Bottom:
border.frame = CGRectMake(0, CGRectGetHeight(self.frame) - thickness, CGRectGetWidth(self.frame), thickness)
break
case UIRectEdge.Left:
border.frame = CGRectMake(0, 0, thickness, CGRectGetHeight(self.frame))
break
case UIRectEdge.Right:
border.frame = CGRectMake(CGRectGetWidth(self.frame) - thickness, 0, thickness, CGRectGetHeight(self.frame))
break
default:
break
}
border.backgroundColor = color.CGColor;
self.addSublayer(border)
}
}
যদি কারও কাছে কখনও জামারিন সংস্করণ প্রয়োজন হয়:
public static class UIUtils
{
public static void AddBorder(this CALayer cALayer, UIRectEdge edge, UIColor color, float thickness)
{
var border = new CALayer();
switch (edge)
{
case UIRectEdge.Top:
border.Frame = new CGRect(0, 0, cALayer.Frame.Width, height: thickness);
break;
case UIRectEdge.Bottom:
border.Frame = new CGRect(0, cALayer.Frame.Height - thickness, width: cALayer.Frame.Width, height: thickness);
break;
case UIRectEdge.Left:
border.Frame = new CGRect(0, 0, width: thickness, height: cALayer.Frame.Height);
break;
case UIRectEdge.Right:
border.Frame = new CGRect(cALayer.Frame.Width - thickness, y: 0, width: thickness, height: cALayer.Frame.Height);
break;
default: break;
}
border.BackgroundColor = color.CGColor;
cALayer.AddSublayer(border);
}
}
পলসের উত্তরের একটি সুইফট 4 সংস্করণ এখানে
func addTopBorder(color: UIColor, thickness: CGFloat) {
let border = UIView()
border.backgroundColor = color
border.autoresizingMask = [.flexibleWidth, .flexibleBottomMargin]
border.frame = CGRect(x: 0, y: 0, width: frame.size.width, height: thickness)
addSubview(border)
}
func addBottomBorder(color: UIColor, thickness: CGFloat) {
let border = UIView()
border.backgroundColor = color
border.autoresizingMask = [.flexibleWidth, .flexibleTopMargin]
border.frame = CGRect(x: 0, y: frame.size.height - thickness, width: frame.size.width, height: thickness)
addSubview(border)
}
func addLeftBorder(color: UIColor, thickness: CGFloat) {
let border = UIView()
border.backgroundColor = color
border.autoresizingMask = [.flexibleHeight, .flexibleRightMargin]
border.frame = CGRect(x: 0, y: 0, width: thickness, height: frame.size.height)
addSubview(border)
}
func addRightBorder(color: UIColor, thickness: CGFloat) {
let border = UIView()
border.backgroundColor = color
border.autoresizingMask = [.flexibleHeight, .flexibleLeftMargin]
border.frame = CGRect(x: frame.size.width - thickness, y: 0, width: thickness, height: frame.size.height)
addSubview(border)
}
@ অ্যাডিসন দ্বারা অনুপ্রাণিত হয়ে আমি তৃতীয় পক্ষের কোনও কাঠামো ব্যবহার না করেই এক্সটেনশনটি আবার লিখেছি, কারণ তিনি স্ন্যাপকিট এবং কোকো লাম্বারজ্যাক ব্যবহার করেছিলেন।
@ অ্যাডিজনস পদ্ধতির মতো আমি পূর্বে যুক্ত হওয়া সীমানাগুলিও সরিয়ে দিচ্ছি, সুতরাং এই বাস্তবায়নটি টেবিল সেল এবং সংগ্রহের ঘর হিসাবে পুনরায় ব্যবহারযোগ্য দৃশ্যের সাথে দুর্দান্ত খেলতে হবে।
fileprivate class BorderView: UIView {} // dummy class to help us differentiate among border views and other views
// to enabling us to remove existing borders and place new ones
extension UIView {
func setBorders(toEdges edges: [UIRectEdge], withColor color: UIColor, inset: CGFloat = 0, thickness: CGFloat) {
// Remove existing edges
for view in subviews {
if view is BorderView {
view.removeFromSuperview()
}
}
// Add new edges
if edges.contains(.all) {
addSidedBorder(toEdge: [.left,.right, .top, .bottom], withColor: color, inset: inset, thickness: thickness)
}
if edges.contains(.left) {
addSidedBorder(toEdge: [.left], withColor: color, inset: inset, thickness: thickness)
}
if edges.contains(.right) {
addSidedBorder(toEdge: [.right], withColor: color, inset: inset, thickness: thickness)
}
if edges.contains(.top) {
addSidedBorder(toEdge: [.top], withColor: color, inset: inset, thickness: thickness)
}
if edges.contains(.bottom) {
addSidedBorder(toEdge: [.bottom], withColor: color, inset: inset, thickness: thickness)
}
}
private func addSidedBorder(toEdge edges: [RectangularEdges], withColor color: UIColor, inset: CGFloat = 0, thickness: CGFloat) {
for edge in edges {
let border = BorderView(frame: .zero)
border.backgroundColor = color
addSubview(border)
border.translatesAutoresizingMaskIntoConstraints = false
switch edge {
case .left:
NSLayoutConstraint.activate([
border.leftAnchor.constraint(equalTo: self.leftAnchor, constant: inset),
border.topAnchor.constraint(equalTo: self.topAnchor, constant: inset),
border.bottomAnchor.constraint(equalTo: self.bottomAnchor, constant: -inset),
NSLayoutConstraint(item: border, attribute: .width, relatedBy: .equal, toItem: nil, attribute: .width, multiplier: 1, constant: thickness) ])
case .right:
NSLayoutConstraint.activate([
border.rightAnchor.constraint(equalTo: self.rightAnchor, constant: -inset),
border.topAnchor.constraint(equalTo: self.topAnchor, constant: inset),
border.bottomAnchor.constraint(equalTo: self.bottomAnchor, constant: -inset),
NSLayoutConstraint(item: border, attribute: .width, relatedBy: .equal, toItem: nil, attribute: .width, multiplier: 1, constant: thickness) ])
case .top:
NSLayoutConstraint.activate([
border.leftAnchor.constraint(equalTo: self.leftAnchor, constant: inset),
border.rightAnchor.constraint(equalTo: self.rightAnchor, constant: -inset),
border.topAnchor.constraint(equalTo: self.topAnchor, constant: inset),
NSLayoutConstraint(item: border, attribute: .height, relatedBy: .equal, toItem: nil, attribute: .height, multiplier: 1, constant: thickness) ])
case .bottom:
NSLayoutConstraint.activate([
border.leftAnchor.constraint(equalTo: self.leftAnchor, constant: inset),
border.rightAnchor.constraint(equalTo: self.rightAnchor, constant: -inset),
border.bottomAnchor.constraint(equalTo: self.bottomAnchor, constant: -inset),
NSLayoutConstraint(item: border, attribute: .height, relatedBy: .equal, toItem: nil, attribute: .height, multiplier: 1, constant: thickness) ])
}
}
}
private enum RectangularEdges {
case left
case right
case top
case bottom
}
}
যদি আমি স্টোরিবোর্ডের মধ্যে থেকে বিল্ডিং করি তবে আমি আমার দরকারীগুলির UIView
পিছনে একটি যুক্ত করা পছন্দ করি UIView
... যদি আমি আমার শীর্ষে একটি সীমানা তৈরি করতে চাই UIView
, তবে আমি কেবল UIView
আমার সীমানা প্রস্থের মাধ্যমে পটভূমির উচ্চতা বাড়িয়ে তুলি ... একই অন্য কোনও পক্ষের জন্য করা :)
ব্যক্তিগতভাবে আমি ভিউ + ড্রআরেক্টের উপ-শ্রেণিবদ্ধকরণ পছন্দ করি তবে এখানে এটি সম্পর্কে আরও একটি উপায় রয়েছে (এবং এটি @ পোলাভিথের গৃহীত উত্তরের মতো একই লাইনের সাথে কাজ করে):
আপনার পছন্দসই মাত্রা পছন্দ করতে আপনার নতুন সীমানা স্তরটি সেট আপ করা যেতে পারে। সুতরাং, যদি পোলাভিথের উত্তরের মতো, আপনি একটি স্তরটি যতটা লম্বা হতে চান তত লম্বা হতে পারেন এবং আপনি যে দৃশ্যের সীমানা রাখতে চান তার মতো প্রশস্ত। আপনি যেখানে চান সেখানে এটি স্থাপনের জন্য স্তরটির ফ্রেম সংজ্ঞাটি ব্যবহার করুন এবং তারপরে এটিকে আপনার দৃশ্যে একটি উপ-স্তর হিসাবে যুক্ত করুন।
রেফারেন্সের জন্য, আমার নিজের প্রয়োজনটি ছিল ভিউটির বাম দিকের দিকে সীমানা লাগানো (দয়া করে এই কোডটি কেটে পেস্ট করবেন না এবং 'আমাকে কেবল' ডিস্ক করুন না কেননা এটি ভিউয়ের শীর্ষে কোনও সীমানা রাখে না please - নীচের কোডটি পরিবর্তন করা যথেষ্ট সহজ):
CALayer *leftBorder = [CALayer layer];
leftBorder.borderColor = [UIColor colorWithRed:0.0 green:91.0/255.0 blue:141.0/255.0 alpha:1.0].CGColor;
leftBorder.borderWidth = 1;
leftBorder.frame = CGRectMake(0, 0, 1.0, CGRectGetHeight(self.myTargetView.frame));
[self.myTargetView.layer addSublayer:leftBorder];
আমি এটির মধ্য দিয়ে একমাত্র মধ্যপন্থী সুবিধা অনুমান করি এবং একটি ছোট ইউআইভিউ বা ইউআইএলবেল তৈরি করাই হ'ল কলায়ার অনুমিতভাবে 'হালকা-ওজন' বলে মনে করেন এবং ক্যালায়ার্স ব্যবহার করে ওভার-রাইডিং ড্রয়ারেক্ট বনাম সম্পর্কে অনেক মজার মতামত রয়েছে (মতামত হিসাবে) : আইওএস: ইউআইভিউ'র 'ড্রয়রেক্ট:' বনাম এর স্তরটির ডেলাগেট 'ড্রলায়ার: ইনকন্টেক্সট:' ) ব্যবহার করছে।
আমি নীল রঙ পছন্দ করি।
N8tr এর পাশাপাশি স্টোরিবোর্ড থেকে সেগুলি সেট করার একটি উপলব্ধতা রয়েছে তা যুক্ত করতে পারে:
- .h ফাইলের মতো borderColor
এবং দুটি বৈশিষ্ট্য যুক্ত borderWidth
করুন;
- তারপরে আপনি keyPaths
স্টোরিবোর্ডে সরাসরি যুক্ত করতে পারেন, স্ক্রিনশটের লিঙ্কটি দেখতে পারেন
ড্যানশেভ উত্তরটি সুইফ্ট 3-এ রূপান্তর করুন
extension CALayer {
func addBorder(edge: UIRectEdge, color: UIColor, thickness: CGFloat) {
let border = CALayer()
switch edge {
case .top:
border.frame = CGRect(x: 0, y: 0, width: self.frame.width, height: thickness)
break
case .bottom:
border.frame = CGRect(x: 0, y: self.frame.height - thickness, width: self.frame.width, height: thickness)
break
case .left:
border.frame = CGRect(x: 0, y: 0, width: thickness, height: self.frame.height)
break
case .right:
border.frame = CGRect(x: self.frame.width - thickness, y: 0, width: thickness, height: self.frame.height)
break
default:
break
}
border.backgroundColor = color.cgColor;
self.addSublayer(border)
}
}
সি # তে জামারিনের জন্য আমি সাব স্তরটি যুক্ত করার সময় কেবল সীমানার ইনলাইন তৈরি করি
View.Layer.AddSublayer(new CALayer()
{
BackgroundColor = UIColor.Black.CGColor,
Frame = new CGRect(0, 0, View.Frame.Width, 0.5f)
});
আপনি নীচে, বাম এবং ডান সীমান্তের জন্য এটি (অন্যদের পরামর্শ অনুযায়ী) ব্যবস্থা করতে পারেন।
আপনি ইউআইকিট এবং ফাউন্ডেশন বিভাগগুলির এই সংগ্রহটিও দেখতে পারেন: https://github.com/leszek-s/LS বিভাগ
এটি কোডের একক লাইনের সাথে ইউআইভিউয়ের একপাশে সীমানা যুক্ত করার অনুমতি দেয়:
[self.someView lsAddBorderOnEdge:UIRectEdgeTop color:[UIColor blueColor] width:2];
এবং এটি সঠিকভাবে দর্শন ঘূর্ণন পরিচালনা করে যখন বেশিরভাগ এখানে পোস্ট করা উত্তরগুলি এটি ভালভাবে পরিচালনা করে না।
দ্রষ্টব্য: এখানে বেশিরভাগ সমাধান অভিযোজিত নয় এবং আকার পরিবর্তন করবে না। যে আকারগুলি পুনরায় আকার দেবে তা আপনার সূচনাকালীন সময়ে ব্যাপক প্রভাব ফেলবে কারণ তারা প্রচুর সিপিইউ ব্যবহার করে।
আপনি এই সমাধানটি নীচে ব্যবহার করতে পারেন। এটি ইউআইবিজেয়ারপ্যাথগুলিতে কাজ করে যা স্তরগুলির চেয়ে হালকা, দ্রুত প্রারম্ভকালীন সময় সৃষ্টি করে। এটি ব্যবহার করা সহজ, নীচে নির্দেশাবলী দেখুন।
class ResizeBorderView: UIView {
var color = UIColor.white
var lineWidth: CGFloat = 1
var edges = [UIRectEdge](){
didSet {
setNeedsDisplay()
}
}
override func draw(_ rect: CGRect) {
if edges.contains(.top) || edges.contains(.all){
let path = UIBezierPath()
path.lineWidth = lineWidth
color.setStroke()
UIColor.blue.setFill()
path.move(to: CGPoint(x: 0, y: 0 + lineWidth / 2))
path.addLine(to: CGPoint(x: self.bounds.width, y: 0 + lineWidth / 2))
path.stroke()
}
if edges.contains(.bottom) || edges.contains(.all){
let path = UIBezierPath()
path.lineWidth = lineWidth
color.setStroke()
UIColor.blue.setFill()
path.move(to: CGPoint(x: 0, y: self.bounds.height - lineWidth / 2))
path.addLine(to: CGPoint(x: self.bounds.width, y: self.bounds.height - lineWidth / 2))
path.stroke()
}
if edges.contains(.left) || edges.contains(.all){
let path = UIBezierPath()
path.lineWidth = lineWidth
color.setStroke()
UIColor.blue.setFill()
path.move(to: CGPoint(x: 0 + lineWidth / 2, y: 0))
path.addLine(to: CGPoint(x: 0 + lineWidth / 2, y: self.bounds.height))
path.stroke()
}
if edges.contains(.right) || edges.contains(.all){
let path = UIBezierPath()
path.lineWidth = lineWidth
color.setStroke()
UIColor.blue.setFill()
path.move(to: CGPoint(x: self.bounds.width - lineWidth / 2, y: 0))
path.addLine(to: CGPoint(x: self.bounds.width - lineWidth / 2, y: self.bounds.height))
path.stroke()
}
}
}
সুইফটে একটি ইউআইভিউয়ের জন্য শীর্ষ সীমানা এবং নীচে বর্ডার সেট করার জন্য।
let topBorder = UIView(frame: CGRect(x: 0, y: 0, width: 10, height: 1))
topBorder.backgroundColor = UIColor.black
myView.addSubview(topBorder)
let bottomBorder = UIView(frame: CGRect(x: 0, y: myView.frame.size.height - 1, width: 10, height: 1))
bottomBorder.backgroundColor = UIColor.black
myView.addSubview(bottomBorder)