111. IB에서 layer.borderColor를 설정하는 것이 왜 쓸모가 없나요?
아래 그림과 같이 둥근 모서리와 빨간색 테두리가 있는 직사각형 효과를 얻기 위해 IB에서 UIView의 런타임 속성을 설정했습니다.
그런데 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에서 사용할 수 없나요?
오류: 열거형 케이스 패턴은 열거형이 아닌 '열거형 이름'의 값과 일치할 수 없습니다.
베타 5부터 Swift는 O-C에서 NS_ENUM 매크로를 사용하여 정의된 열거형 클래스만 매핑할 수 있습니다. 따라서 typedef 열거형 모드에 정의된 모든 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의 레이아웃Manager.delegate를 설정합니다.
textView.layoutManager.delegate = self; // 선언해야 합니다.
그런 다음 대리자 메서드를 구현합니다.
- (CGFloat)layoutManager:(NSLayoutManager *)layoutManagerlineSpacingAfterGlyphAtIndex:(NSUInteger)glyphIndexwithProposedLineFragmentRect:(CGRect)rect { return 4; // 这是行间距 }
117. UITextView의 최소 높이 수정
IB에서 UITextView의 프레임 높이를 어떻게 수정해도 소용이 없습니다. UITextView의 최소 높이는 콘텐츠를 통해 계산되며 최소 높이는 단일 행의 높이와 같습니다. 따라서 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.
따라서 이미지를 삽입한 후 이 세 가지 값을 기본값으로 변경해야 합니다(글꼴만 수정하면 작동하지 않음).
[mutableAttrString addAttributes: @{NSFontAttributeName:[UIFontsystemFontOfSize:16],(id)kCTSuperscriptAttributeName:@0,NSBaselineOffsetAttributeName:@0} range:NSMakeRange(0,mutableAttrString.length)];NSSuperscriptAttributeName은 iOS에서 유효하지 않습니다. . 따라서 대신 CoreText의 kCTSuperscriptAttributeName을 사용해야 합니다.
118. 두 개의 ViewController를 탐색 컨트롤러에 동시에 푸시하는 방법은 무엇입니까?
다음과 같이 하세요.
[viewController1.navigationController pushViewController:viewController2animated:NO]; [viewController2.navigationController pushViewController:viewController3animated:YES];첫 번째 PUSH에는 애니메이션이 없고 두 번째 PUSH에는 애니메이션이 있습니다. 애니메이션 - 사용자는 ViewController가 하나만 푸시되었다고 생각하지만 실제로는 두 개를 푸시했습니다.
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은 일반적으로 단일 클릭 인식과 더블 클릭 인식을 구별하는 데 사용됩니다. 싱글클릭과 더블클릭 두 가지 동작이 있다고 가정해 보겠습니다. 사용자가 더블클릭을 했을 때 싱글클릭과 더블클릭을 동시에 인식하고 싶지 않다면 다음 코드를 사용하면 됩니다. 🎜>
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