Maison > développement back-end > tutoriel php > Questions de développement iOS (9)

Questions de développement iOS (9)

黄舟
Libérer: 2023-03-05 06:52:02
original
1448 Les gens l'ont consulté

111. Pourquoi définir layer.borderColor dans IB est-il inutile ?
J'ai défini la propriété Runtime de UIView dans IB pour obtenir un effet rectangle avec des coins arrondis et une bordure rouge, comme indiqué ci-dessous :



Cependant, la propriété borderColor semble être invalide Oui, la bordure ne peut pas être affichée.
layer.borderColor est une propriété CGColorRef, et le panneau de couleurs de la propriété Runtime ne peut obtenir que la propriété UIColor, vous ne pouvez donc pas définir borderColor dans IB, mais ne pouvez le définir que via le code.
112. Pouvez-vous toujours utiliser les macros DLog et ALog dans Swift ?
Les macros complexes utilisées en C et Objective-C ne peuvent pas être utilisées dans Swift. Les macros complexes sont des macros qui s'ajoutent aux définitions de constantes, y compris les macros de fonctions avec parenthèses. Nous pouvons définir des fonctions globales à la place :

func dLog(message: String, filename: String = __FILE__, function: String =__FUNCTION__, line: Int = __LINE__) {
if DEBUG==1 { 
println("[\(filename.lastPathComponent):\(line)] \(function) -\(message)")
}
}
Copier après la connexion

113. Les énumérations en O-C ne peuvent pas être utilisées dans Swift ?
Erreur : le modèle de casse Enum ne peut pas correspondre aux valeurs du type non-énum 'nom de l'énumération'
À partir de la version bêta 5, Swift ne peut mapper que les classes d'énumération définies à l'aide de la macro NS_ENUM dans O-C. Par conséquent, toutes les énumérations O-C définies en mode typedef enum doivent être redéfinies avec NS_NUM :

typedef enum {
ChinaMobile = 0, // MNC 00 02 07
ChinaUnicom, // MNC 01 06
ChinaTelecom, // MNC 03 04
ChinaTietong, // MNC 20
Unknown
} CarrierName;
Copier après la connexion

114. La macro #ifdef ne peut-elle pas être utilisée dans Swift ?
#if/#else/#endif peut être utilisé dans Swift :

#if DEBUG
let a = 2
#else
let a = 3
#endif
Copier après la connexion

Mais le symbole DEBUG doit être défini dans d'autres indicateurs Swift :



115. Quelle est la différence entre la méthode textFieldShouldReturn renvoyant OUI ou NON ?
Le retour de OUI déclenchera la correction automatique du texte et la mise en majuscule automatique des premières lettres (le soi-disant comportement par défaut dans la documentation Apple), tandis que le retour de NON ne le fera pas.
116. Comment changer la hauteur de ligne de UITextView ?
Définissez d'abord le layoutManager.delegate de UITextView :
textView.layoutManager.delegate = self; // vous devrez vous déclarer
Ensuite, implémentez la méthode déléguée :

- (CGFloat)layoutManager:(NSLayoutManager *)layoutManagerlineSpacingAfterGlyphAtIndex:(NSUInteger)glyphIndexwithProposedLineFragmentRect:(CGRect)rect
{
return 4; // 这是行间距
}
Copier après la connexion

117. Modifier la hauteur minimale de UITextView
Peu importe la façon dont vous modifiez la hauteur du cadre de UITextView dans IB, cela ne sert à rien. La hauteur minimale de UITextView est calculée à travers son contenu et sa hauteur minimale est égale à la hauteur d'une seule ligne. Par conséquent, sur iOS 7, vous pouvez modifier la hauteur minimale en définissant son textContainerInset (iOS 6 est contentInset) :

if (NSFoundationVersionNumber >NSFoundationVersionNumber_iOS_6_1) {
self.textContainerInset =UIEdgeInsetsMake(4, 10, 4, 10);
} else {
self.contentInset =UIEdgeInsetsMake(4, 10, 4, 10);
}
Copier après la connexion

117 Après avoir inséré une image (NSTextAttachment), la police NSAttribtuedString est inexplicablement. plus petit
Police avant d'insérer l'image :



Après avoir inséré l'image :



C'est parce que NSTextAttachment est inséré sous forme d'exposant , ce qui entraîne la modification de trois attributs : police, baseline, NSSuperscriptAttributeName.
Donc, après avoir inséré l'image, vous devez modifier ces trois valeurs​​par défaut (la simple modification de la police ne fonctionnera pas) :

[mutableAttrString addAttributes:
@{NSFontAttributeName:[UIFontsystemFontOfSize:16],(id)kCTSuperscriptAttributeName:@0,NSBaselineOffsetAttributeName:@0} range:NSMakeRange(0,mutableAttrString.length)];
Copier après la connexion

Notez que NSSuperscriptAttributeName n'est pas valide sous iOS. Par conséquent, vous devez plutôt utiliser le kCTSuperscriptAttributeName de CoreText.
118. Comment insérer deux ViewControllers dans le contrôleur de navigation en même temps ?
Faites simplement ceci :

[viewController1.navigationController pushViewController:viewController2animated:NO];
[viewController2.navigationController pushViewController:viewController3animated:YES];
Copier après la connexion

Le premier PUSH n'a pas d'animation, et le second PUSH en a. pas d'animation. Avec l'animation, l'utilisateur pensera qu'un seul ViewController a été poussé, mais en fait vous en avez poussé deux.
119. Comptez le nombre de lignes de code dans l'ensemble du projet
Ouvrez le terminal, utilisez la commande cd pour localiser le répertoire où se trouve le projet, puis appelez le nom suivant pour compter le nombre de lignes et nombre total de chaque fichier de code source :

find . "(" -name "*.m" -or -name "*.mm" -or-name "*.cpp" -or -name "*.h" -or -name "*.rss"")" -print | xargs wc -l
其中,-name "*.m" 就表示扩展名为.m的文件。同时要统计java文件和xml文件的命令分别是:
find . "(" -name "*.java" ")" -print | xargs wc -l
find . "(" -name "*.xml" ")" -print | xargs wc -l
Copier après la connexion

120. Comment réduire le délai de la méthode requireGestureRecognizerToFail ?
requireGestureRecognizerToFail est généralement utilisé pour faire la distinction entre la reconnaissance par simple clic et par double clic. Supposons que vous ayez deux gestes, un simple clic et un double clic. Si vous ne souhaitez pas que cela soit reconnu comme un simple clic et un double clic en même temps lorsque l'utilisateur double-clique, vous pouvez utiliser le code suivant :

UITapGestureRecognizer *doubleTapGestureRecognizer =[[UITapGestureRecognizer alloc]
initWithTarget:self action:@selector(handleDoubleTap:)];
doubleTapGestureRecognizer.numberOfTapsRequired = 2;
[self addGestureRecognizer:doubleTapGestureRecognizer];
UITapGestureRecognizer *singleTapGestureRecognizer =[[UITapGestureRecognizer alloc] initWithTarget:selfaction:@selector(handleSingleTap:)];
singleTapGestureRecognizer.numberOfTapsRequired = 1;
[singleTapGestureRecognizer requireGestureRecognizerToFail: doubleTapGestureRecognizer];
[selfaddGestureRecognizer:singleTapGestureRecognizer];
Copier après la connexion

Mais cette méthode a un inconvénient fatal. L'inconvénient est que puisque chaque clic doit d'abord être reconnu comme un double-clic, et que la reconnaissance du double-clic doit échouer avant de traiter le clic, il y aura un délai pour chaque clic, généralement ce temps est de 0,35 seconde. Bien que 0,35 seconde soit court, les utilisateurs peuvent ressentir un retard notable. Par conséquent, nous devons surcharger TapGestureRecognizer pour réduire ce délai :

#import <UIKit/UIGestureRecognizerSubclass.h>
#define UISHORT_TAP_MAX_DELAY 0.25
@interface UIShortTapGestureRecognizer : UITapGestureRecognizer
@property(nonatomic,assign)float maxDelay;
@end
#import"UIShortTapGestureRecognizer.h"
@implementation UIShortTapGestureRecognizer
- (instancetype)initWithTarget:(NSObject*)target action:(SEL)selector{
self=[super initWithTarget:targetaction:selector];
if (self) {
self.maxDelay=UISHORT_TAP_MAX_DELAY;
}
return self;
}
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
[super touchesBegan:toucheswithEvent:event];
dispatch_after(dispatch_time(DISPATCH_TIME_NOW,(int64_t)(self.maxDelay * NSEC_PER_SEC)), dispatch_get_main_queue(), ^
{
// 0.1 秒后,宣告手势识别失败
if (self.state !=UIGestureRecognizerStateRecognized)
{
self.state= UIGestureRecognizerStateFailed;
}
});
}
@end
Copier après la connexion

Vous pouvez maintenant définir la propriété maxDelay de UIShortTapGestureRecognizer après l'avoir instanciée. Notez que cette valeur ne doit pas être inférieure à 0,2 seconde (l'utilisateur doit être très rapide, sinon l'action de double-clic ne pourra pas être complétée), et la valeur optimale est de 0,25.

Ce qui précède est le contenu des questions de développement iOS (9). Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois (www.php.cn) !

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal