Couper transparent trou dans UIView
À la recherche pour créer une vue qui a un cadre transparent de l'intérieur de sorte que le point de vue de la vue peut être vu à travers ce cadre transparent, mais les zones en dehors de cette volonté de ne pas montrer à travers. Donc, essentiellement, d'une fenêtre à l'intérieur de la vue.
Espère être en mesure de faire quelque chose comme ceci:
CGRect hole = CGRectMake(100, 100, 250, 250);
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetFillColorWithColor(context, [UIColor blackColor].CGColor);
CGContextFillRect(context, rect);
CGContextAddRect(context, hole);
CGContextClip(context);
CGContextSetFillColorWithColor(context, [UIColor clearColor].CGColor);
CGContextFillRect(context, rect);
mais claire ne remplace pas le noir alors tout d'arrière-plan est noir. Toutes les idées le long de ces lignes?
- oui, il est mort @Fattie
Vous devez vous connecter pour publier un commentaire.
C'est mon œuvre (comme je n'ai eu besoin d'un point de vue avec des parties transparentes):
En-tête (.h) fichier:
De mise en œuvre (.m) file:
Maintenant pour ajouter une vue partielle de la transparence, vous devez importer le PartialTransparentView personnalisé UIView sous-classe, puis l'utiliser comme suit:
Cela va créer une vue avec 2 rectangles transparents.
Bien sûr, vous pouvez ajouter autant de rectangles que vous le souhaitez, ou tout simplement d'en utiliser un.
Le code ci-dessus est seulement la manipulation des rectangles, donc si vous souhaitez utiliser les cercles, vous devrez le modifier.
isOpaque
ne l'aide pas. Quelqu'un a réussi à le résoudre?backgroundColor
fait de l'écart de noir. Fonctionne sans réglage de labackgroundColor
Lefteris Réponse est tout à fait juste, cependant, il crée transparent Rects. La CIRCULAIRE couche transparente, modifier tirage rect comme
J'ai utilisé
UIBezierPath
pour gérer le découpage de la transparence trou.Le code suivant va dans une sous-classe de la
UIView
que vous voulez dessiner un transparent, trou:Une autre solution:
Le Grand rect est tout le point de vue (de couleur jaune) et la petite est le transparent rect.
L'opacité de couleur est réglable.
@mosib la réponse a été d'une grande utilité pour moi jusqu'à ce que je voulais dessiner plus d'une circulaire de découpes dans mon point de vue. Après un peu de mal, j'ai mis à jour mon drawRect comme ceci (code swift...désolé mauvaise édition):
Cela va faire la coupure:
Cette application prend en charge les Rectangles et les Cercles, écrit en swift:
PartialTransparentMaskView
Voici mon général, la mise en œuvre rapide.
{someViewArray.map{($0,false)}} //array of views, not round
Espère que cela aide quelqu'un, merci aux autres contributeurs
Si vous voulez quelque chose de rapide et efficace, j'ai ajouté une bibliothèque (TAOverlayView) à CocoaPods qui vous permet de créer des superpositions avec rectangulaire/circulaire de trous, permettant à l'utilisateur d'interagir avec vue derrière la superposition. Je l'ai utilisé pour créer ce tutoriel pour l'un de nos apps:
Vous pouvez changer l'arrière-plan par la mise en au
backgroundColor
de la superposition avec quelque chose commeUIColor(red: 0, green: 0, blue: 0, alpha: 0.85)
, en fonction de votre couleur et de l'opacité des besoins.Mise en œuvre de la @Lefteris réponse sur Swift 4:
Eh bien, je vais répondre comme raté le commentaire et rempli un formulaire de réponse 🙂
J'ai vraiment aimerais Carsten à fournir plus d'informations sur la meilleure façon de faire ce qu'il propose.
Vous pouvez utiliser
pour créer un arrière-plan de la "couleur" de l'image de n'importe quelle complexité. Une image peut être créée par programmation si vous êtes familier avec les cours de dessin ou de manière statique si les fenêtres windows sont prédéfinis.
Fini par "Simulation" il
windowFrame est une propriété
dans ce code créer plus de cercle
Y compris une réponse pour Xamarin Studio iOS à l'aide de C#. Ceci dessine un seul rectangle arrondi avec 60% d'Alpha. Pour la plupart tirés de la réponse de @mikeho
Vous pouvez atteindre cet objectif en donnant le point de vue de la couche d'une frontière.
Cela vous donnera un cadre carré de la largeur de la 10 et la transparence de la base.
Vous pouvez également définir la couche
cornerRadius
à la moitié de la vue sur la largeur et cela vous donnera un cercle creux.J'ai utilisé le réponse de Bushra Shahid et ça fonctionnait bien, mais il a un problème si les deux cercles se chevauchent les uns les autres.
J'ai utilisé cette approche différente qui fonctionne bien dans ce cas:
En résumé:
UIImage
masque en noir et blanc au lieu de/transparent.CIMaskToAlpha
CIFilter
pour le convertir en un transparent/masque blanc.CGImage
que le contenu d'unCALayer
CALayer
que la vue d'un masque.Le faire dans l'autre sens! Le lieu de ces points de vue que vous aimeriez voir à travers le "trou" dans une vue séparée de la bonne taille. Ensuite, réglez "clipsToBounds" sur " OUI " et placez-la vue sur le dessus. La vue avec la "transparence" est la undermost ensuite. "clipsToBounds" signifie tout, à l'extérieur de la boîte/le trou est coupé.
Alors vous pourriez avoir à traiter comment les touches sont traitées. Mais c'est une autre question. Peut-être mettre en userInteractionEnabled sur la selon les points de vue est assez.