Je souhaite appliquer ContainerRelativeShape uniquement à des coins spécifiques [SwiftUI]

Cet article indique que vous souhaitez utiliser la forme arrondie automatique ContainerRelativeShape qui est apparue dans iOS 14 uniquement pour des coins spécifiques.

Qu'est-ce que ContainerRelativeShape?

Le nombre d'interfaces utilisateur aux coins arrondis uniques à chaque pièce augmente, comme le terminal iPhone 11 lui-même et le widget apparu dans iOS14. Le ContainerRelativeShape affiche le rayon arrondi approprié à chaque emplacement.

Objectif

Placez-le en haut à gauche Appliquer ContainerRelativeShape Développez et arrondissez le coin supérieur gauche!

--Je ne veux arrondir que des coins spécifiques

Je vais vous expliquer la mise en œuvre de l'image à l'extrême droite qui a réalisé cela.

code

Forme personnalisée

Utilisation du protocole Shape Il y a un OptionSet ʻUIRectCornerqui est juste pour gérer les informations de coin, alors utilisez-le Définissez votre propre structureContainerRelativeShapeSpecificCorner`.

struct ContainerRelativeShapeSpecificCorner: Shape {
    
    private let corners: [UIRectCorner]
    
    init(corner: UIRectCorner...) {
        self.corners = corner
    }
    
    func path(in rect: CGRect) -> Path {
        var p = ContainerRelativeShape().path(in: rect)
        
        if corners.contains(.allCorners) {
            return p
        }
        
        if !corners.contains(.topLeft) {
            p.addPath(Rectangle().path(in: CGRect(x: rect.origin.x, y: rect.origin.y, width: rect.width / 2, height: rect.height / 2)))
        }
        if !corners.contains(.topRight) {
            p.addPath(Rectangle().path(in: CGRect(x: rect.origin.x + rect.width / 2, y: rect.origin.y, width: rect.width / 2, height: rect.height / 2)))
        }
        if !corners.contains(.bottomLeft) {
            p.addPath(Rectangle().path(in: CGRect(x: rect.origin.x, y: rect.origin.y + rect.height / 2, width: rect.width / 2, height: rect.height / 2)))
        }
        if !corners.contains(.bottomRight) {
            p.addPath(Rectangle().path(in: CGRect(x: rect.origin.x + rect.width / 2, y: rect.origin.y + rect.height / 2, width: rect.width / 2, height: rect.height / 2)))
        }
        return p
    }
}

Exemple d'utilisation

//À l'origine
Image("camera")
    .clipShape(ContainerRelativeShape())

//Ce mec(Coins arrondis uniquement pour des coins spécifiques)
Image("camera")
    .clipShape(ContainerRelativeShapeSpecificCorner(corner: .topLeft, .topRight))

//Tous les exemples de code
struct SampleView: View {
    var body: some View {
        Group {
            Image("camera")
                .resizable()
                .scaledToFill()
                .frame(width: 80, height: 80)
                .clipShape(ContainerRelativeShapeSpecificCorner(corner: .topLeft))
        }
        .frame(maxWidth: .infinity, maxHeight: .infinity, alignment: .topLeading)
        .padding(8)
    }
}

Recommended Posts

Je souhaite appliquer ContainerRelativeShape uniquement à des coins spécifiques [SwiftUI]
Je souhaite surveiller un fichier spécifique avec WatchService
Je veux convertir des caractères ...
Je souhaite créer un modèle spécifique d'ActiveRecord ReadOnly
Je souhaite rechercher de manière récursive des fichiers dans un répertoire spécifique
Je souhaite accorder des autorisations de modification et de suppression uniquement à l'affiche
Seulement ce dont je veux me souvenir, 4 modèles pour écrire des tests unitaires
[Ruby] Je souhaite afficher uniquement le caractère impair dans la chaîne de caractères
Lorsque vous souhaitez que Rails désactive une session pour un contrôleur spécifique
[Ruby] Je souhaite extraire uniquement la valeur du hachage et uniquement la clé
Je veux écrire un joli build.gradle
Je souhaite éliminer les messages d'erreur en double
Je veux créer une application ios.android
Je souhaite utiliser DBViewer avec Eclipse 2018-12! !!
Je souhaite installer PHP 7.2 sur Ubuntu 20.04.
Je veux arrêter complètement les mises à jour Java
Je veux utiliser @Autowired dans Servlet
Je souhaite cibler les champs statiques sur @Autowired
Je veux faire du développement d'équipe à distance
Mémo de développement ~ Je souhaite afficher uniquement la première image publiée plusieurs fois ~
Je veux obtenir uniquement l'heure à partir des données de type Time ...! [Strftime] * Notes supplémentaires
Je veux toujours montrer ce que j'ai publié uniquement à moi-même qui est connecté
Je veux trier par délimiteur d'onglet avec ruby
Exécuter R à partir de Java Je veux exécuter rJava
[Swift] Je veux dessiner des lignes de quadrillage (carrés)
Je souhaite envoyer un e-mail en Java.
[Ruby] Je veux faire un saut de méthode!
Je veux utiliser java8 forEach avec index
Je veux var_dump le contenu de l'intention
Je souhaite transmettre APP_HOME pour me connecter à Gradle
Je veux écrire une simple répétition d'une chaîne de caractères
Je souhaite concevoir une structure pour la gestion des exceptions
rsync4j --Je veux toucher rsync en Java.
Je veux jouer avec Firestore de Rails
Je veux être finalement même à kotlin
Je veux écrire rapidement de java vers sqlite
Je veux tronquer après la virgule décimale
Je veux réduire les erreurs simples. Pour vous commander.
Je souhaite effectuer un traitement d'agrégation avec spring-batch
[Rails] Je veux charger du CSS avec webpacker
Je souhaite supprimer un fichier géré par Git
Je veux obtenir la valeur en Ruby
Je veux voir uniquement les dernières car le journal Docker est devenu trop volumineux