ホームページ >バックエンド開発 >PHPチュートリアル >iOS 開発に関する質問 (9)
111. IB での Layer.borderColor の設定が役に立たないのはなぜですか?
IB の UIView の Runtime プロパティを設定して、以下の図に示すように、角が丸く赤い境界線を持つ長方形の効果を取得します。
ただし、borderColor プロパティが無効であるようで、境界線を表示できません。
layer.borderColor は CGColorRef プロパティであり、Runtime プロパティのカラー パネルは UIColor プロパティのみを取得できるため、IB で borderColor を設定することはできず、コードを通じてのみ設定できます。
112. Swift では DLog マクロと ALog マクロを引き続き使用できますか?
C および Objective-C で使用される複雑なマクロは、Swift では使用できません。複雑なマクロは、括弧付きの関数マクロなど、定数定義に追加されたマクロです。代わりにグローバル関数を定義できます:
func dLog(message: String, filename: String = __FILE__, function: String =__FUNCTION__, line: Int = __LINE__) { if DEBUG==1 { println("[\(filename.lastPathComponent):\(line)] \(function) -\(message)") } }
113 O-C の列挙型は Swift では使用できません。
エラー: 列挙型ケースのパターンは非列挙型「列挙名」の値と一致できません
Beta 5 の時点では、Swift は O-C の NS_ENUM マクロを使用して定義された列挙型クラスのみをマップできます。したがって、typedef enum モードで定義されたすべての O-C 列挙は NS_NUM:
typedef enum { ChinaMobile = 0, // MNC 00 02 07 ChinaUnicom, // MNC 01 06 ChinaTelecom, // MNC 03 04 ChinaTietong, // MNC 20 Unknown } CarrierName;
114 で再定義する必要があります。#ifdef マクロは Swift では使用できませんか?
#if/#else/#endif は Swift で使用できます:
#if DEBUG let a = 2 #else let a = 3 #endif
ただし、DEBUG シンボルは他の Swift フラグで定義する必要があります:
115 YES または NO を返す textFieldShouldReturn メソッドの違いは何ですか?
YES を返すと自動テキスト修正と自動最初の文字の大文字化 (Apple ドキュメントのいわゆるデフォルト動作) がトリガーされますが、NO を返すとトリガーされません。
116. UITextViewの行の高さを変更するには?
最初に UITextView のlayoutManager.delegateを設定します:
textView.layoutManager.delegate = self; // 宣言する必要があります:
次にデリゲートメソッドを実装します:
- (CGFloat)layoutManager:(NSLayoutManager *)layoutManagerlineSpacingAfterGlyphAtIndex:(NSUInteger)glyphIndexwithProposedLineFragmentRect:(CGRect)rect { return 4; // 这是行间距 }
117。 UITextViewの最小の高さを変更します。どうやってもIBでUITextViewのフレームの高さを変更しても無駄です。 UITextView の最小の高さはそのコンテンツを通じて計算され、その最小の高さは 1 つの行の高さと同じになります。したがって、iOS 7 では、textContainerInset (iOS 6 は contentInset) を設定することで最小の高さを変更できます:
if (NSFoundationVersionNumber >NSFoundationVersionNumber_iOS_6_1) { self.textContainerInset =UIEdgeInsetsMake(4, 10, 4, 10); } else { self.contentInset =UIEdgeInsetsMake(4, 10, 4, 10); }117 画像 (NSTextAttachment) を挿入すると、NSAttribtuedString フォントが不可解にも小さくなります
画像を挿入する前のフォント:
画像の挿入後:
これは、NSTextAttachment が上付き形式で挿入されるため、フォント、ベースライン、NSSuperscriptAttributeName の 3 つの属性が変更されます。
そのため、画像を挿入した後、これら 3 つの値をデフォルトに変更する必要があります (フォントを変更するだけでは機能しません):
[mutableAttrString addAttributes: @{NSFontAttributeName:[UIFontsystemFontOfSize:16],(id)kCTSuperscriptAttributeName:@0,NSBaselineOffsetAttributeName:@0} range:NSMakeRange(0,mutableAttrString.length)];NSSuperscriptAttributeName は iOS では無効であることに注意してください。したがって、代わりに CoreText の kCTSuperscriptAttributeName を使用する必要があります。
118. 一度に 2 つの ViewController をナビゲーション コントローラーにプッシュするにはどうすればよいですか?
これを行うだけです:
[viewController1.navigationController pushViewController:viewController2animated:NO]; [viewController2.navigationController pushViewController:viewController3animated:YES];最初の PUSH にはアニメーションがあり、2 番目の PUSH にはアニメーションがあり、ユーザーは 1 つだけをプッシュしたように感じます。 ViewController を PUSH しました。実際には 2 つを PUSH しました。
119. プロジェクト全体のコードの行数を数えます
ターミナルを開き、cd コマンドを使用してプロジェクトが配置されているディレクトリを見つけ、次の名前を呼び出して各行の数と合計数を数えます。ソースコードファイル:
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 -l120 requireGestureRecognizerToFail メソッドの遅延を減らすにはどうすればよいですか?
requireGestureRecognizerToFail は通常、シングルクリック認識とダブルクリック認識を区別するために使用されます。シングルクリックとダブルクリックという 2 つのジェスチャがあるとします。ユーザーがダブルクリックしたときに、同時にシングルクリックとダブルクリックとして認識されたくない場合は、次のコードを使用できます。
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];
#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
これで、UIShortTapGestureRecognizer をインスタンス化した後にその maxDelay プロパティを設定できるようになりました。この値は 0.2 秒未満であってはなりません (ユーザーは非常に速くなければなりません。そうしないとダブルクリック操作が完了できません)。最適な値は 0.25 です。
上記は iOS 開発に関する質問 (9) の内容です。その他の関連コンテンツについては、PHP 中国語 Web サイト (www.php.cn) に注目してください。