In SwiftUI, there’s a handy built-in modifier referred to as cornerRadius that permits you to simply create rounded corners for a view. By making use of the cornerRadius modifier to a Rectangle view, you possibly can remodel it right into a rounded rectangle. The worth you present to the modifier determines the extent of the rounding impact.
|
Rectangle() .cornerRadius(10.0) |
Alternatively, SwiftUI additionally supplies a typical RoundedRectangle view for making a rounded rectangle:
|
RoundedRectangle(cornerRadius: 25.0) |
Sadly, each the cornerRadius modifier and the RoundedRectangle view can solely apply the identical nook radius to all corners of the form.
What if it is advisable spherical a particular nook of a view?
In iOS 17, the SwiftUI framework introduces a brand new view referred to as UnevenRoundedRectangle. What units this view aside is the flexibility to specify a definite radius worth for every nook, permitting builders to create extremely customizable shapes.
Observe: We have now a tutorial on UIKit displaying you learn how to spherical particular corners.
Working with UnevenRoundedRectangle
With UnevenRoundedRectangle, you possibly can simply create rectangular shapes with rounded corners of various radii. To make use of UnevenRoundedRectangle, you merely must specify the nook radius for every nook. Right here is an instance:
|
UnevenRoundedRectangle(cornerRadii: .init( topLeading: 50.0, bottomLeading: 10.0, bottomTrailing: 50.0, topTrailing: 30.0), model: .steady) .body(width: 300, top: 100) .foregroundStyle(.indigo) |
Optionally, you possibly can point out the model of the corners. A steady nook model will give the corners a smoother look. Should you’ve put the code above in Xcode 15, you possibly can create an oblong form like under.

You should use this form and remodel it right into a button by utilizing the background modifier. Here’s a pattern code snippet:
}) {
Textual content(“Register”)
.font(.title)
}
.tint(.white)
.body(width: 300, top: 100)
.background {
UnevenRoundedRectangle(cornerRadii: .init(
topLeading: 50.0,
bottomLeading: 10.0,
bottomTrailing: 50.0,
topTrailing: 30.0),
model: .steady)
.foregroundStyle(.indigo)
}
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
Button(motion: {
}) { Textual content(“Register”) .font(.title) } .tint(.white) .body(width: 300, top: 100) .background { UnevenRoundedRectangle(cornerRadii: .init( topLeading: 50.0, bottomLeading: 10.0, bottomTrailing: 50.0, topTrailing: 30.0), model: .steady) .foregroundStyle(.indigo) } |
Animating the Rounded Corners

To animate the rounded corners of the UnevenRoundedRectangle, you should use the withAnimation operate and toggle a Boolean variable. Right here is an instance code snippet:
@State personal var animate = false
var physique: some View {
UnevenRoundedRectangle(cornerRadii: .init(
topLeading: animate ? 10.0 : 80.0,
bottomLeading: animate ? 80.0 : 10.0,
bottomTrailing: animate ? 80.0 : 10.0,
topTrailing: animate ? 10.0 : 80.0))
.foregroundStyle(.indigo)
.body(top: 200)
.padding()
.onTapGesture {
withAnimation {
animate.toggle()
}
}
}
}
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
struct AnimatedCornerView: View {
@State personal var animate = false
var physique: some View {
UnevenRoundedRectangle(cornerRadii: .init( topLeading: animate ? 10.0 : 80.0, bottomLeading: animate ? 80.0 : 10.0, bottomTrailing: animate ? 80.0 : 10.0, topTrailing: animate ? 10.0 : 80.0)) .foregroundStyle(.indigo) .body(top: 200) .padding() .onTapGesture { withAnimation { animate.toggle() } }
} } |
On this instance, tapping the rectangle will toggle the animate variable, which controls the nook radii of the rectangle. The withAnimation operate will animate the transition between the 2 units of nook radii.
Creating Distinctive Shapes

By overlapping a number of UnevenRoundedRectangle views, you possibly can create all kinds of shapes. The instance offered above demonstrates learn how to create the particular form proven utilizing the next code:
|
ZStack { ForEach(0..<18, id: .self) { index in UnevenRoundedRectangle(cornerRadii: .init(topLeading: 20.0, bottomLeading: 5.0, bottomTrailing: 20.0, topTrailing: 10.0), model: .steady) .foregroundStyle(.indigo) .body(width: 300, top: 30) .rotationEffect(.levels(Double(10 * index))) } } .overlay { Picture(systemName: “briefcase”) .foregroundStyle(.white) .font(.system(measurement: 100)) } |
So as to add a further visible impact, you possibly can animate the change in opacity by modifying the code as follows:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
ZStack { ForEach(0..<18, id: .self) { index in UnevenRoundedRectangle(cornerRadii: .init(topLeading: 20.0, bottomLeading: 5.0, bottomTrailing: 20.0, topTrailing: 10.0), model: .steady) .foregroundStyle(.indigo) .body(width: 300, top: 30) .opacity(animate ? 0.6 : 1.0) .rotationEffect(.levels(Double(10 * index))) .animation(.easeInOut.delay(Double(index) * 0.02), worth: animate) } } .overlay { Picture(systemName: “briefcase”) .foregroundStyle(.white) .font(.system(measurement: 100)) } .onTapGesture { animate.toggle() } |
Implementing this modification will end in a visually charming impact that provides an additional degree of curiosity to your design.

Abstract
The addition of the UnevenRoundedRectangle view in SwiftUI supplies builders with a handy resolution for rounding particular corners of rectangular views. It additionally provides you the flexibleness and choices to attain the look you need. With the UnevenRoundedRectangle form, you possibly can seamlessly incorporate distinctive and attention-grabbing shapes into your app, enhancing its general design and person expertise.
