Как создать строку над UIButtons в ios?

У меня есть 8 UIButtons. Теперь я хочу создать линию над этими кнопками.

Я пытался, и я могу провести линию. Пожалуйста, проверьте, что я делаю.

MyDrawingView.h

#import <UIKit/UIKit.h>

@interface MyDrawingView : UIView{

CGPoint fromPoint;
CGPoint toPoint;
UIColor* currentColor;



UIImage *backgroundImage;
}

@property CGPoint fromPoint;
@property CGPoint toPoint;
@property(nonatomic,retain) UIColor* currentColor;

@end



MyDrawingView.m

#import "MyDrawingView.h"

@implementation MyDrawingView

@synthesize fromPoint;
@synthesize toPoint;
@synthesize currentColor;



- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
    // Initialization code

    backgroundImage = [UIImage imageNamed:@"office.jpeg"];
}
return self;
}


- (void)drawRect:(CGRect)rect {

//CGPoint drawingTargetPoint = CGPointMake(100,0);
//[backgroundImage drawAtPoint:drawingTargetPoint];

CGContextRef    context = UIGraphicsGetCurrentContext();
CGContextSetLineWidth(context,10);
CGContextSetStrokeColorWithColor(context, currentColor.CGColor);
CGContextMoveToPoint(context,fromPoint.x , fromPoint.y);
CGContextAddLineToPoint(context, toPoint.x, toPoint.y);
CGContextStrokePath(context);


}

- (void) touchesBegan:(NSSet*)touches withEvent:(UIEvent*)event
{
UITouch* touchPoint = [touches anyObject];
fromPoint = [touchPoint locationInView:self];
toPoint = [touchPoint locationInView:self];

[self setNeedsDisplay];
}

-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
UITouch* touch = [touches anyObject];
toPoint=[touch locationInView:self];
[self setNeedsDisplay];
}

-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
UITouch* touch = [touches anyObject];
toPoint = [touch locationInView:self];
[self setNeedsDisplay];
}

Теперь в другом классе я использую 8 кнопок на viewDidLoad , пожалуйста, проверьте, что я делаю.

-(void)viewDidLoad{

8 UIButtons (8 buttons in one line and 10 pixels gap in X-position after every button)

[self method_Call_drawView];
}




-(void)method_Call_drawView{
v = [[MyDrawingView alloc]initWithFrame:CGRectMake(100,350,400,400)]; 
v.backgroundColor = [UIColor whiteColor];
[v setNeedsDisplay];
[self.view addSubview:v];
}

 .h file
#import <UIKit/UIKit.h>


@class MyDrawingView;
@interface iPad_Level1 : UIViewController{

UIButton *btn1;
UIButton *btn2;
UIButton *btn3;
UIButton *btn4;
UIButton *btn5;
UIButton *btn6;
UIButton *btn7;
UIButton *btn8;
MyDrawingView *v;
}
@property(nonatomic,retain)MyDrawingView *v;
@end

Я могу создать вид и нарисовать линию на виде, но я не могу коснуться UIButtons и создать линию над ним.

Моя линия увеличивается и уменьшается, где бы я ни нажимал, но я хочу, чтобы эта линия была на моем UIButton.

пожалуйста, проверьте, что я пытаюсь сделать itunes.apple.com/in/app/word-search-puzzles/id609067187?mt=8, проверьте желтую и синюю линии на кнопках.

Любая идея или предложение будут весьма приветствоваться.


person Afreen Khan    schedule 10.09.2013    source источник
comment
до сих пор не ясно, что вы хотите именно ..   -  person D-eptdeveloper    schedule 10.09.2013
comment
может быть проще использовать готовое изображение, поэтому нарисуйте кнопку так, как вы хотите, чтобы она выглядела в графическом редакторе. Затем установите кнопку для отображения созданного вами изображения. Немного сложно понять, чего вы хотите, не видя примера.   -  person DogCoffee    schedule 10.09.2013
comment
@smick Спасибо, сэр, за ваш ответ, но я не понял.   -  person Afreen Khan    schedule 10.09.2013
comment
@AfreenKhan возьмите UIImageView высотой 1 пиксель и поместите его над своим UIButton, вот и все, и измените его в соответствии с вашими потребностями.   -  person D-eptdeveloper    schedule 10.09.2013
comment
Хорошо, я взял UiImageview на self.view поверх кнопки. означает [btn1 addSubview:img1]; , теперь как создать линию над этим?   -  person Afreen Khan    schedule 10.09.2013
comment
@AfreenKhan: это изображение само по себе работает как строка для вашего брата, вы можете установить цвет фона изображения в соответствии с желаемым цветом для этой строки.   -  person D-eptdeveloper    schedule 10.09.2013
comment
пожалуйста, проверьте, что я пытаюсь сделать itunes.apple. com/in/app/word-search-puzzles/id609067187?mt=8, проверьте желтую и синюю линии на кнопках.   -  person Afreen Khan    schedule 10.09.2013


Ответы (2)


Вы можете добавить дополнительное представление высотой 1 пиксель перед нужной кнопкой.

UIView *lineView = [[UIView alloc] initWithFrame:CGRectMake(0, 200, self.view.bounds.size.width, 1)]; // change the 200 to fit your screen
lineView.backgroundColor = [UIColor blackColor];
[self.view addSubview:lineView];

И для перемещения этой строки, когда пользователь нажимает кнопку, используйте:

[UIView animateWithDuration:0.5
                              delay:0.5
                            options: UIViewAnimationCurveEaseOut
                         animations:^
         {                 
             CGRect frame = lineView .frame;
             frame.origin.y = 100;   // for move
             frame.size.width = 50; // for re-size
             lineView .frame = frame;
         }
             completion:^(BOOL finished)
         {
             NSLog(@"Completed");
         }
];
person Tarek Hallak    schedule 10.09.2013
comment
Спасибо, сэр, за ваш ответ, могу ли я узнать, как это сделать? - person Afreen Khan; 10.09.2013
comment
это хорошая идея, вы можете установить цвет фона на то, что хотите. - person DogCoffee; 10.09.2013
comment
хорошо, я пытаюсь. Но как линия будет создаваться? когда я нажимаю кнопку 1, а затем кнопку 2? - person Afreen Khan; 10.09.2013
comment
Вы хотите переместить эту строку при нажатии кнопки? - person Tarek Hallak; 10.09.2013
comment
Нет, сэр, я не хочу этого делать. В этом коде строка появится без нажатия кнопки. Я хочу, когда я касаюсь UIButton. Строка будет создаваться только для этого размера кнопки, и линия все еще будет отображаться, и когда я коснусь кнопки 2 с этой линией, линия станет увеличиваться и так далее, но только до того места, где расположена кнопка. Если есть 8 кнопок, я нажимаю кнопки 1, 2, , и 4, то линия будет только до кнопки 4. Строка будет увеличиваться кнопка за кнопкой. - person Afreen Khan; 10.09.2013
comment
пожалуйста, проверьте, что я пытаюсь сделать itunes.apple. com/in/app/word-search-puzzles/id609067187?mt=8, проверьте желтую и синюю линии на кнопках. - person Afreen Khan; 10.09.2013
comment
хм, обычно такие приложения или игры включают cocos2d или какую-то другую 2D-технику, извините, я не настолько эксперт в этом, но если вы хотите это как минимум, вы можете поиграть с моим кодом выше. - person Tarek Hallak; 10.09.2013

#import <QuartzCore/CAGradientLayer.h>

Импортируйте это и добавьте quartzcore framework в проект.

-(IBAction)btnTapped:(id)sender{
    UIButton *m_btnTemp=((UIButton *)sender);
    m_btnTemp.layer.borderColor=[UIColor blackColor];
    m_btnTemp.layer.borderWidth= 1.0f;
}

Если вы хотите удалить цвет границы, установите borderWidth=0;

person Anil Kothari    schedule 10.09.2013
comment
Ничего не происходит. - person Afreen Khan; 10.09.2013
comment
пожалуйста, проверьте, что я пытаюсь сделать itunes.apple.com/in/app/word-search-puzzles/id609067187?mt=8, проверьте желтую и синюю линии на кнопках. - person Afreen Khan; 10.09.2013
comment
@AfreenKhan: используйте этот код с вашим типом кнопки как пользовательскую кнопку, а не круглый прямоугольник. - person D-eptdeveloper; 10.09.2013
comment
-(void)viewDidLoad{btn1 = [UIButton buttonWithType:UIButtonTypeCustom]; btn1.frame = CGRectMake(100, 100, 25, 25); //77, 639, 148, 51,5 btn1.backgroundColor = [UIColor whiteColor]; [btn1 addTarget:self action:@selector(btnTapped:) forControlEvents:UIControlEventTouchUpInside]; btn1.userInteractionEnabled = ДА ; [self.view addSubview:btn1];} -(void)btnTapped:(id)sender{ UIButton *m_btnTemp=((UIButton *)sender); m_btnTemp.layer.borderColor=[UIColor blackColor]; m_btnTemp.layer.borderWidth= 1.0f; } - person Afreen Khan; 10.09.2013