wpp项目的一些记录

1.如果viewController都是通过push和pop来管理的,那rootViewController相当是个单例了,可以考虑写成单例

2.一个button通过addtarget添加响应事件后,响应的函数参数(id)sender就是那个view,通过view的subviews和super可以得到相应的父view和子view进行view的管理,而不需要去写成成员变量进行管理

3.删除view时,先进行removeFromSuperview,在release和置为nil

4.button的相应事件一般定义在点击时(UIControlEventTouchDown)和点击后UIControlEventTouchUpInside,第一个常用在点击时ui上的变化,第二个常用于点击后按钮响应的事件

5.view在设置背景图时,为了高清图自适应view大小,可以选择在view上add一个UIImageView,在设置view的setBackImageView

6.view subviews得到所有子view,通过view isKindOfClass:[xxx class] 判断view的类型,如此获取相应的view,当然也可通过view的大小或者其他属性判断

7.当你需要为当前的响应添加一个view时,并且需要提醒的view不受其他view的push或者pop的影响,可以选择把view通过[UIApplication shaApplication].keyWindow addSubview:xxx 添加到window上

8.有时候创建好的UIActivityIndicatorView想立即弹出显示,可以选择将主线程挂起0.00001s,通过performSelector 中的afterDelay:0.00001阻塞主线程,马上让出cpu时间让菊花弹出

9.label setFont:[UIFont boldSystemFontOfSize(加粗):18];非加粗systemFontOfSize

10.让输入框第一个输入位置不紧挨着左边:

    {UIView *paddingView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 10, 19)];self.inputField.leftView = paddingView;[paddingView release];self.inputField.leftViewMode = UITextFieldViewModeAlways;}
UITextFiled常用设置:

    NSString *defaultStr = getMulNSStr([NSString stringWithFormat:@"SHARE_PLAY_CODE"],localFileName);[self.inputField setPlaceholder:defaultStr];if (!isPhone()){[self.inputField becomeFirstResponder];}self.inputField.keyboardType = UIKeyboardTypePhonePad;//UIKeyboardTypeNumbersAndPunctuation;self.inputField.contentVerticalAlignment = (UIControlContentVerticalAlignment)UIControlContentHorizontalAlignmentCenter;
//    self.inputField.secureTextEntry = YES;[self.inputField setEnablesReturnKeyAutomatically:YES];[self.inputField setReturnKeyType:UIReturnKeyDone];[self.inputField setDelegate:(id)self];[self.inputField addTarget:self action:@selector(accessCodeTextFiledDone:) forControlEvents:UIControlEventEditingDidEndOnExit];[self.bgView addSubview:self.inputField];
11.添加gif动画:

- (void) addProgressBarGif
{NSData *progressGifData = [NSData dataWithContentsOfFile:[[NSBundle mainBundle] pathForResource:PUBLIC_PROGRESS_BAR_GIF_IPAD3 ofType:@"gif"]];UIWebView *gifWebView = [[[UIWebView alloc] initWithFrame:CGRectMake((62+14)/2, 424/4-30/4.f, 524/2, 30/2)] autorelease];gifWebView.userInteractionEnabled = NO;[gifWebView loadData:progressGifData MIMEType:@"image/gif" textEncodingName:nil baseURL:nil];[self.bgView addSubview:gifWebView];
}

12.keyboard的显示和隐藏事件:

- (void)addKeyboardEvents
{[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil];[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide:) name:UIKeyboardWillHideNotification object:nil];
}- (void)removeKeyboardEvents
{[[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardWillShowNotification object:nil];[[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardWillHideNotification object:nil];
}

- (void)keyboardWillShow:(NSNotification *)notification
{if (bgButton == nil){self.bgButton = [[[UIButton alloc] initWithFrame:self.bounds] autorelease];[self.bgButton setBackgroundColor:[UIColor clearColor]];[self.bgButton addTarget:self action:@selector(keyboardWillHide:) forControlEvents:UIControlEventTouchUpInside];[self addSubview:self.bgButton];[self bringSubviewToFront:self.bgView];}else{[self.bgButton setEnabled:YES];}if (self.keyBoardInfo == nil){self.keyBoardInfo = [notification userInfo];}NSValue* aValue = [self.keyBoardInfo objectForKey:UIKeyboardFrameEndUserInfoKey];CGRect keyboardRect = [aValue CGRectValue];keyboardRect = [self convertRect:keyboardRect fromView:nil];CGFloat keyboardTop = keyboardRect.size.height;CGRect newTextViewFrame = self.bgView.frame;if (isPhone()){if (self.bgView.frame.size.height == 424/2){newTextViewFrame.origin.y = - self.bgView.frame.origin.y + 20;}else{newTextViewFrame.origin.y = - self.bgView.frame.origin.y - 40;}}else{newTextViewFrame.origin.y = keyboardTop - self.bgView.frame.origin.y;}NSValue *animationDurationValue = [self.keyBoardInfo objectForKey:UIKeyboardAnimationDurationUserInfoKey];NSTimeInterval animationDuration;[animationDurationValue getValue:&animationDuration];[UIView beginAnimations:nil context:NULL];[UIView setAnimationDuration:animationDuration];self.bgView.frame = newTextViewFrame;[UIView commitAnimations];
}- (void)keyboardWillHide:(NSNotification *)notification
{if ([self.bgButton isEnabled]){[self.bgButton setEnabled:NO];[self.inputField resignFirstResponder];}
//    NSDictionary* userInfo = [notification userInfo];if (self.keyBoardInfo == nil){self.keyBoardInfo = [notification userInfo];}NSValue *animationDurationValue = [self.keyBoardInfo objectForKey:UIKeyboardAnimationDurationUserInfoKey];NSTimeInterval animationDuration;[animationDurationValue getValue:&animationDuration];[UIView beginAnimations:nil context:NULL];[UIView setAnimationDuration:animationDuration];if (isPhone()){[self.bgView setFrame:CGRectMake(self.bgView.frame.origin.x, IPHONE_ITOUCH_4_4S_HEIGHT/2 - self.bgView.frame.size.height/2, self.bgView.frame.size.width, self.bgView.frame.size.height)];}else{[self.bgView setFrame:CGRectMake(self.bgView.frame.origin.x, IPAD_2_3_HEIGHT/2 - self.bgView.frame.size.height/2, self.bgView.frame.size.width, self.bgView.frame.size.height)];}[UIView commitAnimations];
}

12.textFiled常用的delegate要清楚:

- (BOOL)textFieldShouldReturn:(UITextField *)textField

- (void)textFieldDidBeginEditing:(UITextField *)textField

13.设置button上的文字:

self.closeButton.titleLabel.adjustsFontSizeToFitWidth = YES;self.closeButton.titleLabel.text = getMulNSStr([NSString stringWithFormat:@"PREVIEW_CLOSEBTN"],localFileName);if (isPhone()){[self.closeButton.titleLabel setFont:[UIFont boldSystemFontOfSize:12.f]];}
[self.closeButton setTitleColor:[UIColor colorWithRed:115.f/255.f green:84.f/255.f blue:17.f/255.f alpha:1.0f] forState:UIControlStateNormal];
14.layer可通过zPosition设置上下层位置,view通过sendSubviewToBack和bringSubviewToFront设置上下层view的关系

15.当前view只支持横屏

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation
{return [UIDevice currentDevice].orientation == UIDeviceOrientationLandscapeLeft ||[UIDevice currentDevice].orientation == UIDeviceOrientationLandscapeRight;
}
16.label的属性,label中的文字填满后自动填充 ... 的属性:
titleName = [titleName stringByDeletingPathExtension];

17.用通知解耦合:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(refreshSlide:) name:kNotificationRefreshSlide object:nil];

[[NSNotificationCenter defaultCenter] removeObserver:self name:kNotificationRefreshSlide object:nil];


使用时请仔细揣摩一对多,多对一的关系

18.使用ios的手势时,千万记得在手势的响应事件中添加当前手势的状态判断,否则这个函数后被调用很多遍:

if (recognizer.state == UIGestureRecognizerStateEnded)

19.用调用delegate的方法时,请先判断方法是否能到达,增强代码的健壮性:

if ([self.refreshSlideAndCellDelegate respondsToSelector:@selector(gotoSelectThumbnail:beforIndex:)]){[self.refreshSlideAndCellDelegate gotoSelectThumbnail:prevSlide beforIndex:index];}
20.使用row创建NSIndexPath时,你是不是常常没有加inSection,这是个隐患:

NSIndexPath *nextSlide = [NSIndexPath indexPathForRow:indexinSection:0];
21.scrollview一般的初始化:

- (void)initSlideScrollView
{slideScrollView = [[[UIScrollView alloc] initWithFrame:self.view.bounds] autorelease];slideScrollView.contentSize = slideImageView.frame.size;m_zoneSize = slideScrollView.contentSize;[slideScrollView addSubview:slideImageView];[slideScrollView setMinimumZoomScale:1.0];[slideScrollView setMaximumZoomScale:2.5];[slideScrollView setBounces:NO];slideScrollView.bouncesZoom = NO;slideScrollView.decelerationRate = 0.1f;[slideScrollView setDelegate:self];[slideScrollView setShowsVerticalScrollIndicator:NO];[slideScrollView setShowsHorizontalScrollIndicator:NO];[self.view addSubview:slideScrollView];
}
22.当你决定手动调用drawRect方法时,那你就应该disable掉自动调用这种隐患:

-(void)drawRect:(CGRect)rect

{
if (isNeedDrawRect)

{

.....
}
}

-(void)needDrawRect:(CGRect)rect

{
isNeedDrawRect = YES;

[self drawRect:rect];

isNeedDrawRect = NO;

}

23.initWithCGImage要小心啊,这玩意去创建UImage,真不保险

24.线程的等待和唤醒功能,在同步中实用:

- (void)conditionWait:(NSCondition*)threadCondition
{[threadCondition lock];[threadCondition wait];[threadCondition unlock];
}- (void)conditionSignal:(NSCondition*)threadCondition
{[threadCondition lock];[threadCondition signal];[threadCondition unlock];
}

25.简单的动画用view实现也不错:

- (void)zoomImageView:(UIImageView*)imageView mark:(NSString*)markAnim
{[UIView beginAnimations:markAnim context:nil];[UIView setAnimationDuration:0.2];[UIView setAnimationDelegate:self];CGAffineTransform newTransform =  CGAffineTransformScale(imageView.transform, _minimumPageScale, _minimumPageScale);[imageView setTransform:newTransform];[UIView commitAnimations];
}
动画结束后执行的,有这个delegate:

- (void)animationDidStop:(NSString *)animationID finished:(NSNumber *)finished context:(void *)context


动画都是非阻塞的,动画时应该屏蔽屏幕的点击事件:

self.view.userInteractionEnabled = NO;

26.文件大小,创建者等信息:

NSString *fileMsg = nil;NSError* error;NSDictionary* fileAttributes = [[NSFileManager defaultManager] attributesOfItemAtPath:filePath error:&error];if (fileAttributes != nil){NSNumber *fileSize;NSString *fileOwner, *creationDate, *filesizeStr;NSDate *fileModDate;//文件大小fileSize = [fileAttributes objectForKey:NSFileSize];double size = [fileSize doubleValue];NSString* strFileInfoFormat = nil;if (size <= 0) {filesizeStr = [NSString stringWithFormat : @""];}if(size < 1024){strFileInfoFormat = @"%0.0f B";}else{size /= 1024.f;if (size < 1024){strFileInfoFormat = @"%0.1f KB";}else{size /= 1024.f;if (size < 1024)strFileInfoFormat = @"%0.1f MB";else{size /= 1024.f;strFileInfoFormat = @"%0.1f GB";}}}filesizeStr = [NSString stringWithFormat : strFileInfoFormat, size];//文件创建日期creationDate = [NSString stringWithFormat:@"%@",[fileAttributes objectForKey:NSFileCreationDate]];//文件所有者fileOwner = [NSString stringWithFormat:@"%@",[fileAttributes objectForKey:NSFileOwnerAccountName]];//文件修改日期fileModDate = [fileAttributes objectForKey:NSFileModificationDate];NSTimeZone *zone = [NSTimeZone systemTimeZone];NSInteger interval = [zone secondsFromGMTForDate:fileModDate];fileModDate = [fileModDate dateByAddingTimeInterval:interval];NSString *fileData = [NSString stringWithFormat:@"%@", fileModDate];fileData = [fileData substringToIndex:16];NSString *wordDate = getMulNSStr([NSString stringWithFormat:@"PHOTOWALL_LAST_MODIFIED"],localFileName);fileMsg = [NSString stringWithFormat:@"%@   %@ %@", filesizeStr, wordDate, fileData];}
27.代码强耦合,设计模式是软肋啊。。。




本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部