美文网首页iOS开发程序员
iOS开发之图文混排

iOS开发之图文混排

作者: hmj1993 | 来源:发表于2018-03-13 15:51 被阅读6次

    前阵子工作不忙,正好自己又想要做图片和文字的混编,虽然知道类似的软件有很多,但是因为平时几乎只用原生的相机,所以对五花八门的相机也不了解,所以就想着自己来实现这个功能。

    这个功能的设计思路版本是:
    1.最开始只打算加一张图片和一段文字,所以就很死板,都是固定好的,没什么新意;
    2.后来想着一张图片一段文字的固定格式,还是觉得不人性化,就想着任由使用者随意添加图片和文字,并且如果第一个添加的控件是textview,就默认文本居中,类似标题的存在;
    3.第2个功能实现后,有一天晚上编辑图片给朋友的时候,发现一旦添加好不想要了就得重新开头做,然后就想着再添加个可以删除imageview和textview的功能,并且imageview可以修改图片;
    4.做完第三个功能后,觉得大致实现了,然后突然想到我可以再添加一个拖动textview改变页面布局的功能;
    5.增加了添加输入框前先选择文本对齐方式的功能;
    6.完成。

    最终效果预览

    点击此处预览

    textview相关

    textview的相关操作gif图
    //文本按钮
    -(UIButton *)textButton{
        if (_textButton==nil) {
            _textButton=[UIButton buttonWithType:UIButtonTypeCustom];
            [_textButton setImage:[UIImage imageNamed:@"text"] forState:UIControlStateNormal];
            _textButton.layer.cornerRadius=25;
            _textButton.layer.masksToBounds=YES;
            _textButton.backgroundColor=[UIColor whiteColor];
            [_textButton addTarget:self action:@selector(textButtonAction) forControlEvents:UIControlEventTouchUpInside];
        }
        return _textButton;
    }
    //文本按钮事件
    -(void)textButtonAction{
        self.chooseAlignmentView.hidden=NO; 
    }
    //选择文本对齐方式view
    -(UIView *)chooseAlignmentView{
        if (_chooseAlignmentView==nil) {
            _chooseAlignmentView=[[UIView alloc]initWithFrame:CGRectMake([UIScreen mainScreen].bounds.size.width-145, self.textButton.frame.origin.y, 170, 50)];
            _chooseAlignmentView.layer.cornerRadius=25;
            _chooseAlignmentView.layer.masksToBounds=YES;
            _chooseAlignmentView.layer.borderColor=[[UIColor whiteColor] CGColor];
            _chooseAlignmentView.layer.borderWidth=2;
            _chooseAlignmentView.backgroundColor=[UIColor colorWithRed:253/255.0 green:163/255.0 blue:155/255.0 alpha:1];
           //创建文本左对齐textview
            UIButton *leftButton=[UIButton buttonWithType:UIButtonTypeCustom];
            leftButton.backgroundColor=[UIColor colorWithRed:253/255.0 green:163/255.0 blue:155/255.0 alpha:1];
            [leftButton setImage:[UIImage imageNamed:@"left"] forState:UIControlStateNormal];
            leftButton.layer.cornerRadius=20;
            leftButton.layer.masksToBounds=YES;
            leftButton.tag=1000;
            [leftButton addTarget:self action:@selector(alignButtonAction:) forControlEvents:UIControlEventTouchUpInside];
            //创建文本居中对齐的textview
            UIButton *centerButton=[UIButton buttonWithType:UIButtonTypeCustom];
            centerButton.layer.cornerRadius=20;
            centerButton.layer.masksToBounds=YES;
            centerButton.backgroundColor=[UIColor colorWithRed:253/255.0 green:163/255.0 blue:155/255.0 alpha:1];
            [centerButton setImage:[UIImage imageNamed:@"center"] forState:UIControlStateNormal];
            centerButton.tag=2000;
            [centerButton addTarget:self action:@selector(alignButtonAction:) forControlEvents:UIControlEventTouchUpInside];
            //取消创建textview
            UIButton *cancelButton=[UIButton buttonWithType:UIButtonTypeCustom];
            cancelButton.layer.cornerRadius=20;
            cancelButton.layer.masksToBounds=YES;
            cancelButton.backgroundColor=[UIColor colorWithRed:253/255.0 green:163/255.0 blue:155/255.0 alpha:1];
            [cancelButton setImage:[UIImage imageNamed:@"cancel1"] forState:UIControlStateNormal];
            cancelButton.tag=3000;
            [cancelButton addTarget:self action:@selector(cancelButtonAction) forControlEvents:UIControlEventTouchUpInside];
    
            leftButton.frame=CGRectMake(25, 5, 40, 40);
            [_chooseAlignmentView addSubview:leftButton];
            centerButton.frame=CGRectMake(65, 5, 40, 40);
            [_chooseAlignmentView addSubview:centerButton];
            cancelButton.frame=CGRectMake(105, 5, 40, 40);
            [_chooseAlignmentView addSubview:cancelButton];
    
            _chooseAlignmentView.hidden=YES;
        }
        return _chooseAlignmentView;
    }
    
    -(void)cancelButtonAction{
        self.chooseAlignmentView.hidden=YES;
    }
    
    -(void)alignButtonAction:(UIButton *)button{
            UITextView * textview=[UITextView new];
            textview.layer.borderColor=[UIColor redColor].CGColor;
            textview.layer.borderWidth=2;
            textview.delegate=self;
            textview.text=@"";
            textview.backgroundColor=[UIColor clearColor];
            textview.font=[UIFont fontWithName:@"FZJLJW--GB1-0" size:26];
            self.toolBarView.frame=CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, 44);
            textview.inputAccessoryView=self.toolBarView;
        //给textview添加长按手势
            UILongPressGestureRecognizer *longPress=[[UILongPressGestureRecognizer alloc]initWithTarget:self action:@selector(longTap:)];
            [textview addGestureRecognizer:longPress];
        //给textview添加拖拽手势
            UIPanGestureRecognizer *ges=[[UIPanGestureRecognizer alloc]initWithTarget:self action:@selector(panAction:)];
            [textview addGestureRecognizer:ges];
    
            if (self.totalViewsCount==0) {
    //如果创建的该textview是创建的第一个控件的布局
                textview.frame=CGRectMake(8, 8, [UIScreen mainScreen].bounds.size.width-16, 80);
                if (button.tag==1000) {
                    textview.textAlignment=NSTextAlignmentLeft;
                }else{
                    textview.textAlignment=NSTextAlignmentCenter;
                }
            }else{
    //如果创建的该textview不是第一个控件的布局,lastview记录的是该页面的最后一个控件
                textview.frame=CGRectMake(8, self.lastView.frame.origin.y+self.lastView.frame.size.height+8, [UIScreen mainScreen].bounds.size.width-16, 80);
                if (button.tag==1000) {
                    textview.textAlignment=NSTextAlignmentLeft;
                }else{
                    textview.textAlignment=NSTextAlignmentCenter;
                }
            }
    
            [self cellAddSubview:textview];
    
        self.chooseAlignmentView.hidden=YES;
    
    }
    
    -(void)cellAddSubview:(UIView *)view{
    
        UITableViewCell *cell=[self.tableview cellForRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0]];
    
        [self.totalViewArr addObject:view];
        self.lastView=view;
        self.totalViewsCount++;
        view.tag=930+self.totalViewArr.count;
    
        [cell.contentView addSubview:view];
        self.cellHeight=self.lastView.frame.origin.y+self.lastView.frame.size.height+13;
        [self.tableview reloadData];
    }
    //长按textview选择是否删除
    -(void)longTap:(UITapGestureRecognizer *)ges{
    
        UIAlertController *alertVC=[UIAlertController alertControllerWithTitle:@"确定删除吗" message:nil preferredStyle:UIAlertControllerStyleAlert];
        [alertVC addAction:[UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) {
    
        }]];
        [alertVC addAction:[UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
    
            self.changedTextview=(UITextView *)ges.view;
            //从self.totalViewArr中删除需要删除的textview
            NSMutableArray *tmp=[NSMutableArray array];
            for (UIView *view in self.totalViewArr) {
                if (view.tag==self.changedTextview.tag) {
    
                }else{
                    [tmp addObject:view];
                }
            }
            self.totalViewArr=[NSMutableArray arrayWithArray:tmp];
    //给self.totalViewArr中的控件重新赋tag值
            for (UIView *view in self.totalViewArr) {
                NSInteger index=[self.totalViewArr indexOfObject:view];
                view.tag=931+index;
            }
    
            [self reLayoutSubviewsInCell:self.changedTextview];
    
        }]];
    
        [self presentViewController:alertVC animated:YES completion:^{
    
        }];
    }
    //重新布局tableviewcell中的子控件
    -(void)reLayoutSubviewsInCell:(UIView *)changedView{
    
        UITableViewCell *cell=[self.tableview cellForRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0]];
    
        NSArray *views=cell.contentView.subviews;
    
        for (int i=0; i<views.count; i++) {
            UIView *view=views[i];
            if (i==changedView.tag-931) {
                [view removeFromSuperview];
            }
        }
    
        for (int i=0; i<self.totalViewArr.count; i++) {
    
            UIView *view=self.totalViewArr[i];
    
            if (i<changedView.tag-931) {
    
            }else{
    
                CGRect rect=view.frame;
                view.frame=CGRectMake(rect.origin.x, rect.origin.y-changedView.frame.size.height-8, rect.size.width, rect.size.height);
            }
    
        }
    
        self.lastView=[self.totalViewArr lastObject];
    
        self.cellHeight=self.lastView.frame.origin.y+self.lastView.frame.size.height+13;
        [self.tableview reloadData];
    
    }
    //textview的拖拽手势
    -(void)panAction:(UIPanGestureRecognizer *)ges{
    
        UITableViewCell *cell=[self.tableview cellForRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0]];
        UIView *gesview=ges.view;
        CGPoint point=[ges translationInView:cell.contentView];
        if (ges.state==UIGestureRecognizerStateEnded) {
            if (point.y>=0) {
                NSMutableArray *tmp=[NSMutableArray array];
                //往下
                for (int i=(int)gesview.tag-930; i<self.totalViewArr.count; i++) {
                    UIView *view=self.totalViewArr[i];
                    if (i==self.totalViewArr.count-1) {
                        if (gesview.center.y+point.y>view.center.y ) {
                           //ok
                            if (self.totalViewArr.count==2) {
                                UIView *last=[self.totalViewArr lastObject];
                                CGRect rect=last.frame;
                                last.frame=CGRectMake(rect.origin.x,gesview.frame.origin.y ,rect.size.width , rect.size.height);
                                gesview.frame=CGRectMake(gesview.frame.origin.x, last.frame.size.height+last.frame.origin.y+8, gesview.frame.size.width, gesview.frame.size.height);
                                [tmp addObject:last];
                                [tmp addObject:gesview];
                                [self breakFor:tmp];
                                break;
                            }else{
                                //ok
                                if (gesview.tag==931) {
                                    for (int j=1; j<self.totalViewArr.count; j++) {
                                        UIView *view=self.totalViewArr[j];
                                        CGRect rect=view.frame;
                                        view.frame=CGRectMake(rect.origin.x, rect.origin.y-8-gesview.frame.size.height, rect.size.width, rect.size.height);
                                        [tmp addObject:view];
                                    }
                                    UIView *last=tmp[self.totalViewArr.count-2];
                                    gesview.frame=CGRectMake(gesview.frame.origin.x, last.frame.size.height+8+last.frame.origin.y, gesview.frame.size.width, gesview.frame.size.height);
                                    [tmp addObject:gesview];
                                    [self breakFor:tmp];
                                    break;
                                //ok
                                }else{
                                    for (int j=0; j<gesview.tag-931; j++) {
                                        UIView *view=self.totalViewArr[j];
                                        [tmp addObject:view];
                                    }
                                    for (int j=(int)gesview.tag-930; j<self.totalViewArr.count; j++) {
                                        UIView *view=self.totalViewArr[j];
                                        CGRect rect=view.frame;
                                        view.frame=CGRectMake(rect.origin.x, rect.origin.y-8-gesview.frame.size.height, rect.size.width, rect.size.height);
                                        [tmp addObject:view];
                                    }
                                    UIView *last=[tmp lastObject];
                                    gesview.frame=CGRectMake(gesview.frame.origin.x, last.frame.origin.y+last.frame.size.height+8, gesview.frame.size.width, gesview.frame.size.height);
                                    [tmp addObject:gesview];
                                    [self breakFor:tmp];
                                    break;
                                }
                            }
                        }
                    }else{
                        UIView *nextView=self.totalViewArr[i+1];
                        if (gesview.center.y+point.y>view.center.y && gesview.center.y+point.y<nextView.center.y) {
                            //ok
                            if (gesview.tag==931) {
                                for (int j=1; j<i+1; j++) {
                                    UIView *view=self.totalViewArr[j];
                                    CGRect rect=view.frame;
                                    view.frame=CGRectMake(rect.origin.x, rect.origin.y-8-gesview.frame.size.height, rect.size.width, rect.size.height);
                                    [tmp addObject:view];
                                }
                                UIView *pre=self.totalViewArr[i];
                                gesview.frame=CGRectMake(gesview.frame.origin.x, pre.frame.origin.y+pre.frame.size.height+8, gesview.frame.size.width, gesview.frame.size.height);
                                [tmp addObject:gesview];
                                for (int j=i+1; j<self.totalViewArr.count; j++) {
                                    UIView *view=self.totalViewArr[j];
                                    [tmp addObject:view];
                                }
                                [self breakFor:tmp];
                                break;
                            //ok
                            }else{
                                for (int j=0; j<gesview.tag-931; j++) {
                                    [tmp addObject:self.totalViewArr[j]];
                                }
                                for (int j=(int)gesview.tag-930; j<i+1; j++) {
                                    UIView *tmpview=self.totalViewArr[j];
                                    CGRect rect=tmpview.frame;
                                    tmpview.frame=CGRectMake(rect.origin.x, rect.origin.y-8-gesview.frame.size.height, rect.size.width, rect.size.height);
                                    [tmp addObject:tmpview];
                                }
                                UIView *last=[tmp lastObject];
                                gesview.frame=CGRectMake(gesview.frame.origin.x, last.frame.origin.y+last.frame.size.height+8, gesview.frame.size.width, gesview.frame.size.height);
                                [tmp addObject:gesview];
    
                                for (int j=i+1; j<self.totalViewArr.count; j++) {
                                    [tmp addObject:self.totalViewArr[j]];
                                }
    
                                [self breakFor:tmp];
                                break;
                            }
                        }
                    }
                }
            }else{
    
                NSMutableArray *tmp=[NSMutableArray array];
    
                for (int i=0; i<gesview.tag-931; i++) {
    
                    UIView *view=self.totalViewArr[i];
                    if (gesview.center.y+point.y<view.center.y) {
                        if (self.totalViewArr.count==2) {
                            gesview.frame=CGRectMake(gesview.frame.origin.x, view.frame.origin.y, gesview.frame.size.width, gesview.frame.size.height);
                            [tmp addObject:gesview];
                            view.frame=CGRectMake(view.frame.origin.x, gesview.frame.origin.y+gesview.frame.size.height+8, view.frame.size.width, view.frame.size.height);
                            [tmp addObject:view];
                            [self breakFor:tmp];
                            break;
                        }else{
                            if (view.tag==931&&gesview.tag==930+self.totalViewArr.count) {
                                gesview.frame=CGRectMake(gesview.frame.origin.x, view.frame.origin.y, gesview.frame.size.width, gesview.frame.size.height);
                                [tmp addObject:gesview];
                                for (int j=0; j<self.totalViewArr.count-1; j++) {
                                    UIView *viewtmp=self.totalViewArr[j];
                                    viewtmp.frame=CGRectMake(viewtmp.frame.origin.x, viewtmp.frame.origin.y+gesview.frame.size.height+8, viewtmp.frame.size.width, viewtmp.frame.size.height);
                                    [tmp addObject:viewtmp];
                                }
                                [self breakFor:tmp];
                                break;
                            }else if (gesview.tag==930+self.totalViewArr.count && view.tag!=931){
                                for (int j=0; j<view.tag-931; j++) {
                                    UIView *tmpview=self.totalViewArr[j];
                                    [tmp addObject:tmpview];
                                }
                                gesview.frame=CGRectMake(gesview.frame.origin.x, view.frame.origin.y, gesview.frame.size.width, gesview.frame.size.height);
                                [tmp addObject:gesview];
                                for (int j=(int)view.tag-931; j<self.totalViewArr.count-1; j++) {
                                    UIView *tmpview=self.totalViewArr[j];
                                    CGRect rect=tmpview.frame;
                                    tmpview.frame=CGRectMake(rect.origin.x,gesview.frame.size.height+8+rect.origin.y, rect.size.width, rect.size.height);
                                    [tmp addObject:tmpview];
                                }
                                [self breakFor:tmp];
                                break;
                            }else if (view.tag==931 && gesview.tag!=self.totalViewArr.count+930){
                                gesview.frame=CGRectMake(gesview.frame.origin.x, view.frame.origin.y, gesview.frame.size.width, gesview.frame.size.height);
                                [tmp addObject:gesview];
                                for (int j=0; j<gesview.tag-931; j++) {
                                    UIView *tmpview=self.totalViewArr[j];
                                    CGRect rect=tmpview.frame;
                                    tmpview.frame=CGRectMake(rect.origin.x, rect.origin.y+gesview.frame.size.height+8, rect.size.width, rect.size.height);
                                    [tmp addObject:tmpview];
                                }
                                for (int j=(int)gesview.tag-930; j<self.totalViewArr.count; j++) {
                                    UIView *tmpview=self.totalViewArr[j];
                                    [tmp addObject:tmpview];
                                }
                                [self breakFor:tmp];
                                break;
                            }else if (view.tag!=931 && gesview.tag!=self.totalViewArr.count+930){
                                for (int j=0; j<i; j++) {
                                    UIView *tmpview=self.totalViewArr[j];
                                    [tmp addObject:tmpview];
                                }
                                gesview.frame=CGRectMake(gesview.frame.origin.x, view.frame.origin.y, gesview.frame.size.width, gesview.frame.size.height);
                                [tmp addObject:gesview];
                                for (int j=i; j<gesview.tag-931; j++) {
                                    UIView *tmpview=self.totalViewArr[j];
                                    CGRect rect=tmpview.frame;
                                    tmpview.frame=CGRectMake(rect.origin.x,rect.origin.y+gesview.frame.size.height+8 , rect.size.width, rect.size.height);
                                    [tmp addObject:tmpview];
                                }
                                for (int j=(int)gesview.tag-930; j<self.totalViewArr.count; j++) {
                                    UIView *tmpview=self.totalViewArr[j];
                                    [tmp addObject:tmpview];
                                }
                                [self breakFor:tmp];
                                break;
                            }
                        }
                    }
                }
            }
        }
    }
    
    -(void)breakFor:(NSMutableArray *)tmp{
    
        UITableViewCell *cell=[self.tableview cellForRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0]];
        self.totalViewArr=[NSMutableArray arrayWithArray:tmp];
        for (UIView *view in self.totalViewArr) {
            [view removeFromSuperview];
            NSInteger index=[self.totalViewArr indexOfObject:view];
            view.tag=931+index;
        }
        self.lastView=[self.totalViewArr lastObject];
        for (UIView *view in self.totalViewArr) {
            [cell.contentView addSubview:view];
        }
        [self.tableview reloadData];
    
    }
    
    

    imageview相关

    -(UIButton *)pictureButton{
    
    if (_pictureButton==nil) {
        _pictureButton=[UIButton buttonWithType:UIButtonTypeCustom];
        [_pictureButton setImage:[UIImage imageNamed:@"picture"] forState:UIControlStateNormal];
        _pictureButton.layer.cornerRadius=25;
        _pictureButton.layer.masksToBounds=YES;
        _pictureButton.backgroundColor=[UIColor whiteColor];
        [_pictureButton addTarget:self action:@selector(pictureButtonAction) forControlEvents:UIControlEventTouchUpInside];
    }
    return _pictureButton;
    } 
    //点击图片按钮选择拍照还是相册 
    -(void)pictureButtonAction{
    
    UIAlertController *alertVC=[UIAlertController alertControllerWithTitle:nil message:nil preferredStyle:UIAlertControllerStyleActionSheet];
    
    [alertVC addAction:[UIAlertAction actionWithTitle:@"相册" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
    
        UIImagePickerController *vc=[[UIImagePickerController alloc]init];
        vc.delegate=self;
        vc.sourceType=UIImagePickerControllerSourceTypePhotoLibrary;
        vc.allowsEditing=YES;
        vc.videoQuality=UIImagePickerControllerQualityTypeHigh;
    
        [self presentViewController:vc animated:YES completion:^{
    
        }];
    
    }]];
    
    [alertVC addAction:[UIAlertAction actionWithTitle:@"拍照" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
    
        UIImagePickerController *vc=[[UIImagePickerController alloc]init];
        vc.delegate=self;
        vc.sourceType=UIImagePickerControllerSourceTypeCamera;
        vc.allowsEditing=YES;
        vc.videoQuality=UIImagePickerControllerQualityTypeHigh;
    
        [self presentViewController:vc animated:YES completion:^{
    
        }];
    
    }]];
    
    [alertVC addAction:[UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) {
    
    }]];
    
    [self presentViewController:alertVC animated:YES completion:^{
    
    }];
    } 
    
    //图片选择完成后的操作 
    
    -(void)imagePickerController:(UIImagePickerController )picker didFinishPickingMediaWithInfo:(NSDictionary )info{
    
    NSLog(@"%@",info);
    UIImage *img=[info objectForKey:@"UIImagePickerControllerEditedImage"];
    //UIImage *img=[info objectForKey:@"UIImagePickerControllerOriginalImage"];
    CGSize size=img.size;
    
    if (self.createOrNot==YES) {
        UIImageView * imageview1=[UIImageView new];
        imageview1.layer.cornerRadius=10;
        imageview1.layer.masksToBounds=YES;
        imageview1.layer.borderColor=[UIColor whiteColor].CGColor;
        imageview1.layer.borderWidth=6;
        imageview1.userInteractionEnabled=YES;
        imageview1.image=img;
        UITapGestureRecognizer *tap=[[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(change:)];
        [imageview1 addGestureRecognizer:tap];
    
        if (self.totalViewsCount==0) {
            if (size.width>[UIScreen mainScreen].bounds.size.width) {
                imageview1.frame=CGRectMake(6, 8, [UIScreen mainScreen].bounds.size.width-12, size.height*([UIScreen mainScreen].bounds.size.width-12)/size.width);
            }else{
                imageview1.frame=CGRectMake([UIScreen mainScreen].bounds.size.width/2.0-size.width/2.0, 8,size.width, size.height);
            }
    
        }else{
            if (size.width>[UIScreen mainScreen].bounds.size.width) {
                imageview1.frame=CGRectMake(6, self.lastView.frame.origin.y+self.lastView.frame.size.height+8, [UIScreen mainScreen].bounds.size.width-12, size.height*([UIScreen mainScreen].bounds.size.width-12)/size.width);
            }else{
                imageview1.frame=CGRectMake([UIScreen mainScreen].bounds.size.width/2.0-size.width/2.0, self.lastView.frame.origin.y+self.lastView.frame.size.height+8,size.width, size.height);
            }
    
        }
    
        [self cellAddSubview:imageview1];
    
    }else{
        self.needChangedImageview.image=img;
        self.createOrNot=YES;
    
    }
    
    [picker dismissViewControllerAnimated:YES completion:^{
    
    }];
    } 
    
    //点击图片进行修改或删除 
    
    -(void)change:(UITapGestureRecognizer *)ges{
    
    UIAlertController *alertVC=[UIAlertController alertControllerWithTitle:nil message:nil preferredStyle:UIAlertControllerStyleActionSheet];
    [alertVC addAction:[UIAlertAction actionWithTitle:@"改变图片" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
        self.createOrNot=NO;
        self.needChangedImageview=(UIImageView *)ges.view;
        [self pictureButtonAction];
    }]];
    [alertVC addAction:[UIAlertAction actionWithTitle:@"删除图片" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
    
        UIImageView *imageview=(UIImageView *)ges.view;
        self.changedImageView=imageview;
    
        NSMutableArray *tmp=[NSMutableArray array];
        for (UIView *view in self.totalViewArr) {
            if (view.tag==imageview.tag) {
    
            }else{
                [tmp addObject:view];
            }
        }
        self.totalViewArr=[NSMutableArray arrayWithArray:tmp];
        for (UIView *view in self.totalViewArr) {
            NSInteger index=[self.totalViewArr indexOfObject:view];
            view.tag=931+index;
        }
    
        [self reLayoutSubviewsInCell:self.changedImageView];
    
    }]];
    [alertVC addAction:[UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) {
    
    }]];
    
    [self presentViewController:alertVC animated:YES completion:^{
    
    }];
    }
    

    tableview相关

    -(UITableView *)tableview{
    
    if (_tableview==nil) {
        _tableview=[[UITableView alloc]init];
        _tableview.separatorStyle=UITableViewCellSeparatorStyleNone;
        _tableview.delegate=self;
        _tableview.dataSource=self;
    }
    return _tableview;
    }
    
    -(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{
    
    return 1;
    }
    
    -(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
    
    return 1;
    }
    
    -(UITableViewCell )tableView:(UITableView )tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
    
    static NSString *cellid=@"cellid";
    
    UITableViewCell *cell=[tableView dequeueReusableCellWithIdentifier:cellid];
    
    if (cell==nil) {
        cell=[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellid];
        cell.selectionStyle=UITableViewCellSelectionStyleNone;
        cell.backgroundColor=[UIColor colorWithRed:arc4random()%6/255.0 green:arc4random()%6/255.0 blue:arc4random()%6/255.0 alpha:1];
        self.tableview.backgroundColor=cell.backgroundColor;
    
    }
    
    return cell;
    }
    
    -(CGFloat)tableView:(UITableView )tableView heightForRowAtIndexPath:(NSIndexPath )indexPath{
    
    return self.cellHeight;
    }
    

    随机改变背景颜色

    -(UIButton *)colorButton{
    
    if (_colorButton==nil) {
        _colorButton=[UIButton buttonWithType:UIButtonTypeCustom];
        _colorButton.backgroundColor=[UIColor whiteColor];
        [_colorButton setImage:[UIImage imageNamed:@"color"] forState:UIControlStateNormal];
        _colorButton.layer.cornerRadius=25;
        _colorButton.layer.masksToBounds=YES;
        [_colorButton addTarget:self action:@selector(colorButtonAction) forControlEvents:UIControlEventTouchUpInside];
    }
    return _colorButton;
    }
    //随机改变背景颜色
    -(void)colorButtonAction{
    
    UITableViewCell *cell=[self.tableview cellForRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0]];
    cell.backgroundColor=[UIColor colorWithRed:arc4random()%6/255.0 green:arc4random()%6/255.0 blue:arc4random()%6/255.0 alpha:1];
    self.tableview.backgroundColor=cell.backgroundColor;
    }
    

    保存图片到手机

    -(UIButton *)saveButton{
    
    if (_saveButton==nil) {
        _saveButton=[UIButton buttonWithType:UIButtonTypeCustom];
        _saveButton.backgroundColor=[UIColor whiteColor];
        [_saveButton setImage:[UIImage imageNamed:@"finish"] forState:UIControlStateNormal];
        _saveButton.layer.cornerRadius=25;
        _saveButton.layer.masksToBounds=YES;
        [_saveButton addTarget:self action:@selector(saveButtonAction) forControlEvents:UIControlEventTouchUpInside];
    }
    return _saveButton;
    }
    
    -(void)saveButtonAction{
    
    UITableViewCell *cell=[self.tableview cellForRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0]];
    
    for (UIView *view in [cell.contentView subviews]) {
        if ([view isKindOfClass:[UITextView class]]) {
            UITextView *textview=(UITextView *)view;
            textview.layer.borderWidth=0;
        }
    }
    UIImageWriteToSavedPhotosAlbum([self convertViewToImage:cell], self, @selector(image:didFinishSavingWithError:contextInfo:), nil);
    } 
    
    //view转为image 
    
    -(UIImage )convertViewToImage:(UIView )v{
    
    CGSize s=v.bounds.size;
    UIGraphicsBeginImageContextWithOptions(s, NO, [UIScreen mainScreen].scale);
    [v.layer renderInContext:UIGraphicsGetCurrentContext()];
    
    UIImage *image=UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return image;
    } 
    
    //保存结束后的回调
    -(void)image:(UIImage )image didFinishSavingWithError:(NSError )error contextInfo:(void *)contextInfo{
    
    if(error == nil) {
    
    NSLog(@"success");
    }else{
    
    NSLog(@"fail");
    }
    
    }
    
    

    好了 ,差不多就是这些了,欢迎指教。

    相关文章

      网友评论

        本文标题:iOS开发之图文混排

        本文链接:https://www.haomeiwen.com/subject/oqmzfftx.html