ios 项目总结二2
1 还是scrollview的使用,判断向左向后滑动的判断
-(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView{ newx=scrollView.contentOffset.x; if (xiaotu_array.count*650>newx) { if (newx != oldIx ) { //Left-YES,Right-NO if (newx > oldIx) { huaTag++; NSLog(@"右滑 ===%d",huaTag); }else if(newx < oldIx){ huaTag--; NSLog(@"左滑-- ===%d",huaTag); } oldIx = newx; } } }
当时判断左右滑动是有个方法,响应的Hugtag判断了,但是oldIx的位置总是滑动初始化显示的是上次的的位置,所以导致判断总是不正确,所以再点击按钮的时候重绘oldIx的位置为oldIx=0;
2 pagecontrol和UIscrollvew的结合实现,
pagecontrol = [[UIPageControl alloc]initWithFrame:CGRectMake(280, 680, 50, 23)]; pagecontrol.numberOfPages = xiaotu_array.count; pagecontrol.currentPage = 0; pagecontrol.pageIndicatorTintColor = [UIColor blackColor]; pagecontrol.currentPageIndicatorTintColor=[UIColor grayColor]; [viewRight addSubview:pagecontrol]; - (void)scrollViewDidScroll:(UIScrollView *)scrollview { 根据scrollview的滑动判断page的位置 if (scrollview==Bigscroll) { [seachView removeFromSuperview]; isShowSearch=YES; int page = scrollview.contentOffset.x / 650; pagecontrol.currentPage = page; if (page < xiaotu_array.count) { [pagecontrol setHidden:NO]; pagecontrol.currentPage=page; [pagecontrol setNumberOfPages:xiaotu_array.count]; }else if(page >= xiaotu_array.count && page < streetImages.count+xiaotu_array.count) { [pagecontrol setHidden:NO]; pagecontrol.currentPage=page-xiaotu_array.count; [pagecontrol setNumberOfPages:streetImages.count]; }else { pagecontrol.hidden = YES; } if (scrollview.contentOffset.x/650 < xiaotu_array.count && scrollview.contentOffset.x/650 >= 0) { [mtt setImage:[UIImage imageNamed:@"dj-mtt.png"] forState:UIControlStateNormal]; [biaoshi_line setFrame:CGRectMake(60, 36, 73, 5)]; } if (scrollview.contentOffset.x/650 >= xiaotu_array.count && scrollview.contentOffset.x/650 < xiaotu_array.count+streetImages.count) { [jiePai setImage:[UIImage imageNamed:@"dj-jpt.png"] forState:UIControlStateNormal]; [biaoshi_line setFrame:CGRectMake(193, 36, 73, 5)]; } if (scrollview.contentOffset.x/650 == xiaotu_array.count+streetImages.count) { [dpt setImage:[UIImage imageNamed:@"dj-sjstj.png"] forState:UIControlStateNormal]; [biaoshi_line setFrame:CGRectMake(345, 36, 73, 5)]; } if (scrollview.contentOffset.x/650==xiaotu_array.count+streetImages.count+1) { [kccx setImage:[UIImage imageNamed:@"dj-kccx.png"] forState:UIControlStateNormal]; if (isDrag==YES) { [self performSelector:@selector(loadKuCunData) withObject:nil afterDelay:0]; isDrag=NO; } } } }
3 九宫格的实现 ,可以实现删除的实现,在scrollview添加的button实现
//初始化scrollview [scroll removeFromSuperview]; scroll=[[UIScrollView alloc]initWithFrame:CGRectMake(90, 100, 1024-180, 768-170)]; scroll.backgroundColor=[UIColor whiteColor]; scroll.delegate=self; [self.view addSubview:scroll]; isShowBtn=NO; [self performSelector:@selector(initBtn) withObject:self afterDelay:0];
//初始化九宫格button -(void)initBtn{ int width = scroll.frame.size.width/4; for (int i=0; i<allArrys.count; i++) { t=i/4; int d=fmod(i, 4); UIView *nView = [[UIView alloc] initWithFrame:CGRectMake(width * d + 5+d*10, HIGHT * t +5+t*50, WIDTH, HIGHT)]; // NSLog(@"---%@",NSStringFromCGRect(nView.frame)); nView.backgroundColor=[UIColor whiteColor]; nView.tag=1000+i; UIImageView *BgImage=[[UIImageView alloc]init]; BgImage.frame=CGRectMake(0, 0, 145, 187); BgImage.backgroundColor=[UIColor clearColor]; BgImage.image=[UIImage imageNamed:@"bj.png"]; [nView addSubview:BgImage]; nView.backgroundColor=[UIColor whiteColor]; UIButton *appBtn = [UIButton buttonWithType:UIButtonTypeCustom]; [appBtn setFrame:CGRectMake(2, 2, 141, 183)]; [appBtn addTarget:self action:@selector(goNext:) forControlEvents:UIControlEventTouchUpInside];//默认是走下一页 appBtn.tag = i; [nView addSubview:appBtn]; NSString *aaa=[[dicInfo objectForKey:[allArrys objectAtIndex:i]] objectForKey:@"danpin"]; // NSString *bbb=[NSString stringWithFormat:@"%@",aaa]; NSString *ss=[NSString stringWithFormat:@"Documents/styleSmall/x%@",aaa]; NSString *path = [NSHomeDirectory() stringByAppendingPathComponent:[NSString stringWithFormat:@"%@",ss]]; NSString *fileName=[NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil]; NSString *imageNames=[fileName stringByReplacingOccurrencesOfString:@"-" withString:@"1"]; [appBtn setImage:[UIImage imageWithData:[DataPist stringToByte:imageNames]] forState:UIControlStateNormal]; NSLog(@"---%@",dicInfo); UILabel *label1=[[UILabel alloc]init]; label1.frame=CGRectMake(0,187, 200, 20); label1.text=[[dicInfo objectForKey:[allArrys objectAtIndex:i]]objectForKey:@"huoHao"]; label1.textColor=[UIColor grayColor]; label1.font=[UIFont systemFontOfSize:12]; [nView addSubview:label1]; UILabel *label2=[[UILabel alloc]init]; label2.frame=CGRectMake(0,187+20, 150, 20); label2.text=[[dicInfo objectForKey:[allArrys objectAtIndex:i]]objectForKey:@"chanPinName"]; label2.textColor=[UIColor grayColor]; label2.font=[UIFont systemFontOfSize:12]; [nView addSubview:label2]; UILabel *label3=[[UILabel alloc]init]; label3.frame=CGRectMake(0,187+40, 30, 20); label3.text=@"RMB"; label3.textColor=[UIColor grayColor]; label3.font=[UIFont systemFontOfSize:12]; [nView addSubview:label3]; UILabel *label4=[[UILabel alloc]init]; label4.frame=CGRectMake(40,187+40, 100, 20); NSString *price=[[dicInfo objectForKey:[allArrys objectAtIndex:i]]objectForKey:@"money"]; // label4.text=[price substringToIndex:price.length-5]; label4.text=price; label4.textColor=[UIColor grayColor]; label4.font=[UIFont systemFontOfSize:12]; [nView addSubview:label4]; UIImageView *tagImgView = [[UIImageView alloc] initWithFrame:CGRectMake(145-31, 1, 30, 30)]; [tagImgView setImage:[UIImage imageNamed:@"sc.png"]]; [tagImgView setHidden:YES]; [nView addSubview:tagImgView]; [scroll addSubview:nView]; // nView.userInteractionEnabled = YES; [scroll setContentSize:CGSizeMake( 1024-180,(t+1)*280+50)]; // NSLog(@"-=t=%d==--%@",t,NSStringFromCGRect(scroll.frame)); } UILongPressGestureRecognizer *lpgr = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(LongPressGestureRecognizer:)]; [scroll addGestureRecognizer:lpgr]; UITapGestureRecognizer *oneFinger=[[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(oneFinger:)]; oneFinger.numberOfTapsRequired = 1; oneFinger.delegate=self; [scroll addGestureRecognizer:oneFinger]; // [self performSelector:@selector(jisuan) withObject:nil afterDelay:1]; }
添加方法
//判断是否点击事件,如果长按就isShowBtn==YES,走删除,没按长按或者不按的话就是走另一个页面,isShowBtn==no; -(void)goNext:(UIButton *)sender{ if (isShowBtn==YES) { //走删除页面 UIButton *btn=(UIButton *)sender; [self btnTag:btn.tag]; }else if (isShowBtn==NO){ //走另一个页面 DanPin_ViewController *danPinVC=[[DanPin_ViewController alloc]init]; danPinVC.smallName=[[dicInfo objectForKey:[allArrys objectAtIndex:sender.tag]] objectForKey:@"huoHao"]; [self presentViewController:danPinVC animated:YES completion:NULL]; } } //删除 -(void)btnTag:(int )tag{ [self deleteAppBtn:tag]; } //删除实现 - (void)deleteAppBtn:(int)index { NSArray *views = scroll.subviews; // NSLog(@"----%@",views); __block CGRect newframe; for (int i = index; i < [allArrys count]; i++) { UIView *obj = [views objectAtIndex:i]; __block CGRect nextframe = obj.frame; if (i == index) { [obj removeFromSuperview]; } else { for (UIView *v in obj.subviews) { if ([v isMemberOfClass:[UIButton class]]) { v.tag = i - 1; break; } } [UIView animateWithDuration:0.6 animations:^ { obj.frame = newframe; } completion:^(BOOL finished) { }]; } newframe = nextframe; } if ([PlistName isEqualToString:@"dataOne"]) { [[SavePList sharedInstance]removeBookWithKey:[allArrys objectAtIndex:index] name:@"dataOne"]; [allArrys removeObjectAtIndex:index]; [self initZongJia:@"dataOne"]; }else if ([PlistName isEqualToString:@"dataTwo"]){ [[SavePList sharedInstance]removeBookWithKey:[allArrys objectAtIndex:index] name:@"dataTwo"]; [allArrys removeObjectAtIndex:index]; [self initZongJia:@"dataTwo"]; }else if ([PlistName isEqualToString:@"dataThree"]){ [[SavePList sharedInstance]removeBookWithKey:[allArrys objectAtIndex:index] name:@"dataThree"]; [allArrys removeObjectAtIndex:index]; [self initZongJia:@"dataThree"]; } [self endAnimation]; } //点击取消事件 -(void)oneFinger:(UIPanGestureRecognizer *)gr { [self setCancleFlag]; [self hideBtn]; } //长按删除事件 - (void)LongPressGestureRecognizer:(UIGestureRecognizer *)gr { isShowBtn=YES; if (gr.state == UIGestureRecognizerStateBegan) { if (m_bTransform) return; for (UIView *view in scroll.subviews) { view.userInteractionEnabled = YES; for (UIView *v in view.subviews) { if ([v isMemberOfClass:[UIImageView class]]) [v setHidden:NO]; } } m_bTransform = YES; [self BeginWobble]; } //判断师傅要全部删除 if ([ret isEqualToString:@"1"]) { guanZhuBtn1.hidden=YES; removeBtn1.hidden=NO; }else if ([ret isEqualToString:@"2"]){ guanZhuBtn2.hidden=YES; removeBtn2.hidden=NO; }else if ([ret isEqualToString:@"3"]){ guanZhuBtn3.hidden=YES; removeBtn3.hidden=NO; } }
-(void)BeginWobble { // NSAutoreleasePool* pool=[NSAutoreleasePool new]; for (UIView *view in scroll.subviews) { srand([[NSDate date] timeIntervalSince1970]); float rand=(float)random(); CFTimeInterval t=rand*0.0000000001; [UIView animateWithDuration:0.1 delay:t options:0 animations:^ { // view.transform=CGAffineTransformMakeRotation(-0.05); } completion:^(BOOL finished) { [UIView animateWithDuration:0.1 delay:0 options:UIViewAnimationOptionRepeat|UIViewAnimationOptionAutoreverse|UIViewAnimationOptionAllowUserInteraction animations:^ { // view.transform=CGAffineTransformMakeRotation(0.05); } completion:^(BOOL finished) {}]; }]; } // [pool release]; } -(void)EndWobble { // NSAutoreleasePool* pool=[NSAutoreleasePool new]; for (UIView *view in scroll.subviews) { [UIView animateWithDuration:0.1 delay:0 options:UIViewAnimationOptionAllowUserInteraction|UIViewAnimationOptionBeginFromCurrentState animations:^ { view.transform=CGAffineTransformIdentity; for (UIView *v in view.subviews) { if ([v isMemberOfClass:[UIImageView class]]) [v setHidden:YES]; } } completion:^(BOOL finished) {}]; } // [pool release]; } //设置取消设置delegte的image按钮 -(void)setCancleFlag{ isShowBtn=NO; if(m_bTransform==NO) return; for (UIView *view in scroll.subviews) { view.userInteractionEnabled = YES; for (UIView *v in view.subviews) { if ([v isMemberOfClass:[UIImageView class]]) [v setHidden:YES]; } } m_bTransform = NO; [self EndWobble]; }
5 ipad的实现popView实现,还有就是定制pop的颜色
#import <UIKit/UIKit.h> #import <QuartzCore/QuartzCore.h> @interface PCPopoverController : UIPopoverController @property (readonly) UIColor *tintColor; - (id)initWithContentViewController:(UIViewController *)viewController andTintColor: (UIColor *)tintColor; @end // // PCPopoverController.m // PCPopoverControllerTests // // Created by Patrick Perini on 5/16/12. // Licensing information available in README.md // #import "PCPopoverController.h" #pragma mark - Internal Constants CGFloat const contentInset = 10.0; CGFloat const capInset = 25.0; CGFloat const arrowHeight = 15.0; CGFloat const arrowBase = 24.0; @interface PCPopoverControllerBackgroundView : UIPopoverBackgroundView { UIImageView *borderImageView; UIImageView *arrowImageView; } + (UIColor *)currentTintColor; + (void)setCurrentTintColor: (UIColor *)tintColor; @end @implementation PCPopoverControllerBackgroundView #pragma mark - Internal Class Variables static UIColor *currentTintColor; #pragma mark - Initializers - (id)initWithFrame:(CGRect)frame { self = [super initWithFrame: frame]; if (!self) return nil; UIGraphicsBeginImageContext(CGSizeMake(60, 60)); UIBezierPath *borderPath = [UIBezierPath bezierPathWithRoundedRect: CGRectMake(0, 0, 60, 60) cornerRadius: 8]; [currentTintColor setFill]; [borderPath fill]; UIImage *borderImage = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); UIEdgeInsets capInsets = UIEdgeInsetsMake(capInset, capInset, capInset, capInset); borderImageView = [[UIImageView alloc] initWithImage: [borderImage resizableImageWithCapInsets: capInsets]]; borderImageView.layer.shadowColor = [UIColor blackColor].CGColor; borderImageView.layer.shadowOpacity = .4; borderImageView.layer.shadowRadius = 2; borderImageView.layer.shadowOffset = CGSizeMake(0, 2); UIGraphicsBeginImageContext(CGSizeMake(25, 25)); UIBezierPath *arrowPath = [UIBezierPath bezierPath]; [arrowPath moveToPoint: CGPointMake(12.5, 0)]; [arrowPath addLineToPoint: CGPointMake(25, 25)]; [arrowPath addLineToPoint: CGPointMake(0, 25)]; [arrowPath addLineToPoint: CGPointMake(12.5, 0)]; [currentTintColor setFill]; [arrowPath fill]; UIImage *arrowImage = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); arrowImageView = [[UIImageView alloc] initWithImage: arrowImage]; arrowImageView.layer.shadowColor = [UIColor blackColor].CGColor; arrowImageView.layer.shadowOpacity = .4; arrowImageView.layer.shadowRadius = 2; arrowImageView.layer.shadowOffset = CGSizeMake(0, 1); arrowImageView.layer.masksToBounds = YES; [self addSubview: borderImageView]; [self addSubview: arrowImageView]; return self; } #pragma mark - Class Accessors and Mutators + (UIColor *)currentTintColor { return currentTintColor; } + (void)setCurrentTintColor:(UIColor *)tintColor { currentTintColor = tintColor; } #pragma mark - Class Handlers + (UIEdgeInsets)contentViewInsets { return UIEdgeInsetsMake(contentInset, contentInset, contentInset, contentInset); } + (CGFloat)arrowHeight { return arrowHeight; } + (CGFloat)arrowBase { return arrowBase; } + (BOOL)wantsDefaultContentAppearance{ return NO; } #pragma mark - View Handlers @synthesize arrowOffset; @synthesize arrowDirection; - (void)layoutSubviews { [super layoutSubviews]; CGFloat height = CGRectGetHeight(self.frame); CGFloat width = CGRectGetWidth(self.frame); CGFloat left = 0; CGFloat top = 0; CGFloat coordinate = 0; CGAffineTransform rotation = CGAffineTransformIdentity; switch (arrowDirection) { case UIPopoverArrowDirectionUp: { top += arrowHeight; height -= arrowHeight; coordinate = ((CGRectGetWidth(self.frame) / 2.0) + arrowOffset) - (arrowBase / 2.0); arrowImageView.frame = CGRectMake(coordinate, 0, arrowBase, arrowHeight); break; } case UIPopoverArrowDirectionDown: { height -= arrowHeight; coordinate = ((CGRectGetWidth(self.frame) / 2.0) + arrowOffset) - (arrowBase / 2.0); arrowImageView.frame = CGRectMake(coordinate, height, arrowBase, arrowHeight); rotation = CGAffineTransformMakeRotation(M_PI); break; } case UIPopoverArrowDirectionLeft: { left += arrowBase - ceil((arrowBase - arrowHeight) / 2.0); width -= arrowBase; coordinate = ((CGRectGetHeight(self.frame) / 2.0) + arrowOffset) - (arrowHeight / 2.0); arrowImageView.frame = CGRectMake(0, coordinate, arrowBase, arrowHeight); rotation = CGAffineTransformMakeRotation(-M_PI_2); break; } case UIPopoverArrowDirectionRight: { left += ceil((arrowBase - arrowHeight) / 2.0); width -= arrowBase; coordinate = ((CGRectGetHeight(self.frame) / 2.0) + arrowOffset) - (arrowHeight / 2.0); arrowImageView.frame = CGRectMake(width, coordinate, arrowBase, arrowHeight); rotation = CGAffineTransformMakeRotation(M_PI_2); break; } } borderImageView.frame = CGRectMake(left, top, width, height); [arrowImageView setTransform: rotation]; } @end @implementation PCPopoverController #pragma mark - Properties @synthesize tintColor; #pragma mark - Initializers - (id)initWithContentViewController:(UIViewController *)viewController { self = [self initWithContentViewController: viewController andTintColor: [UIColor whiteColor]]; return self; } - (id)initWithContentViewController:(UIViewController *)viewController andTintColor:(UIColor *)aTintColor { self = [super initWithContentViewController: viewController]; if (!self) return nil; [super setPopoverBackgroundViewClass: [PCPopoverControllerBackgroundView class]]; tintColor = aTintColor; return self; } #pragma mark - Overriders - (void)setPopoverBackgroundViewClass:(Class)popoverBackgroundViewClass {} - (void)presentPopoverFromRect:(CGRect)rect inView:(UIView *)view permittedArrowDirections:(UIPopoverArrowDirection)arrowDirections animated:(BOOL)animated { @synchronized(self) { [[PCPopoverControllerBackgroundView class] setCurrentTintColor: tintColor]; [super presentPopoverFromRect: rect inView: view permittedArrowDirections: arrowDirections animated: animated]; } } - (void)presentPopoverFromBarButtonItem:(UIBarButtonItem *)item permittedArrowDirections:(UIPopoverArrowDirection)arrowDirections animated:(BOOL)animated { @synchronized(self) { [[PCPopoverControllerBackgroundView class] setCurrentTintColor: tintColor]; [super presentPopoverFromBarButtonItem: item permittedArrowDirections: arrowDirections animated: animated]; } } @end
用的时候直接调用就可以了,
UIViewController *viewControllerPick=[[UIViewController alloc]init];
popView=[[PCPopoverController alloc]initWithContentViewController:viewControllerPick andTintColor:[UIColor whiteColor]];
[popView setPopoverContentSize:CGSizeMake(200, 185) animated:YES];
popView.delegate=self;
一个页面多个popview的实现根据textfield的 tag 实现
-(void)textFieldDidBeginEditing:(UITextField *)textField{
CGRect rect=[self.view convertRect:textField.frame fromView:textField.superview];
[popView presentPopoverFromRect:rect inView:self.view permittedArrowDirections:
UIPopoverArrowDirectionLeft animated:YES];
}
popview里面添加tableview的实现多选单选,全选
实现全选按钮或取消全选按钮,设置bool值点击
allSelectFlag=YES;这块设置bool
for (int row=0; row<20; row++) {这块是显示可见的cell的点击按钮,所以为显示的cell无法全选,所以就需要设置bool值做判断,这样就可以全选了,
UITableViewCell *oneCell = (UITableViewCell *)[table cellForRowAtIndexPath:[NSIndexPath indexPathForRow:row inSection:0]];
oneCell.accessoryType = UITableViewCellAccessoryCheckmark;
}
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
UITableViewCell *cell;
NSString *identity=[NSString stringWithFormat:@"%d%d",indexPath.section,indexPath.row];
cell=[tableView dequeueReusableCellWithIdentifier:identity];
if (cell==nil) {
cell=[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identity];
cell.selectionStyle=UITableViewCellSelectionStyleGray;
}
cell.textLabel.font=[UIFont systemFontOfSize:13];
cell.textLabel.textAlignment=NSTextAlignmentCenter;
cell.textLabel.text=[aryyYears objectAtIndex:indexPath.row];
if (allSelectFlag==YES) {
cell.accessoryType = UITableViewCellAccessoryCheckmark;
}
if (allSelectFlag==NO) {
cell.accessoryType = UITableViewCellAccessoryNone;
}
}
tableview的多选实现和单选实现
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
UITableViewCell *oneCell = [tableView cellForRowAtIndexPath: indexPath];
[tableView deselectRowAtIndexPath:indexPath animated:YES];
UITextField *textField;
[tableView deselectRowAtIndexPath:indexPath animated:YES];
if([typePick isEqualToString:@"0"]){
//多选
textField=(UITextField *)[self.view viewWithTag:1000];
if (oneCell.accessoryType == UITableViewCellAccessoryNone) {
oneCell.accessoryType = UITableViewCellAccessoryCheckmark;
NSString *aaa=[aryyYears objectAtIndex:indexPath.row];
//NSString 字符串的实现添加和删除某段字符串方法
[YearString appendString:[NSString stringWithFormat:@"%@,",[aaa substringToIndex:aaa.length-1]]];
[findString appendString:[NSString stringWithFormat:@"%@,",[aryyYears objectAtIndex:indexPath.row]]];
} else{
oneCell.accessoryType = UITableViewCellAccessoryNone;
NSString *aaa=[aryyYears objectAtIndex:indexPath.row];
[YearString deleteCharactersInRange:[YearString rangeOfString:[NSString stringWithFormat:@"%@,",[aaa substringToIndex:aaa.length-1]]]];
[findString deleteCharactersInRange:[findString rangeOfString:[NSString stringWithFormat:@"%@,",[aryyYears objectAtIndex:indexPath.row]]]];
}
textField.text=findString;
单选实现
// NSArray *arry=[tableView visibleCells];
for (UITableViewCell *cell in arry) {
[cell setAccessoryType:UITableViewCellAccessoryNone];
}
[[tableView cellForRowAtIndexPath:indexPath]setAccessoryType:UITableViewCellAccessoryCheckmark];
}
}
字符串实现追加字符串和根据多选实现的删除方法
1 appendString:字符串的追加
2 字符串的删除 :deleteCharactersInRange:[findString rangeOfString:@"sdsds"]
3 字符串的截掉后面几位[aaa substringToIndex:aaa.length-1]
字符串还有很多操作方法,有待学习
以上目前就是想到的新项目中的问题,其实还有许多问题,没写出来,等有时间好好总结下,