Для этого вам нужно использовать два UIViews
. Один UIView
будет работать как тень, а другой будет работать для закругленной границы.
Ниже приведен фрагмент кода Class Method
с помощью protocol
:
@implementation UIMethods
+ (UIView *)genComposeButton:(UIViewController <UIComposeButtonDelegate> *)observer;
{
UIView *shadow = [[UIView alloc]init];
shadow.layer.cornerRadius = 5.0;
shadow.layer.shadowColor = [[UIColor blackColor] CGColor];
shadow.layer.shadowOpacity = 1.0;
shadow.layer.shadowRadius = 10.0;
shadow.layer.shadowOffset = CGSizeMake(0.0f, -0.5f);
UIButton *btnCompose = [[UIButton alloc]initWithFrame:CGRectMake(0, 0,60, 60)];
[btnCompose setUserInteractionEnabled:YES];
btnCompose.layer.cornerRadius = 30;
btnCompose.layer.masksToBounds = YES;
[btnCompose setImage:[UIImage imageNamed:@"60x60"] forState:UIControlStateNormal];
[btnCompose addTarget:observer action:@selector(btnCompose_click:) forControlEvents:UIControlEventTouchUpInside];
[shadow addSubview:btnCompose];
return shadow;
}
В приведенном выше коде btnCompose_click:
станет [делегатом] @required
, который будет срабатывать при нажатии кнопки.
И здесь я добавил кнопку в свой UIViewController
следующим образом:
UIView *btnCompose = [UIMethods genComposeButton:self];
btnCompose.frame = CGRectMake(self.view.frame.size.width - 75,
self.view.frame.size.height - 75,
60, 60);
[self.view addSubview:btnCompose];
Результат будет выглядеть следующим образом:
[/g0]
@Nick дал решение без .splice
, но если по какой-либо причине вы все еще хотите перейти к решению .splice
, вы можете попробовать следующий код.
Вы проверяли id
неправильно, в приведенном ниже решении будут удалены все объекты с id
- 123456
Проблема с вашим текущим решением заключается в том, что вы не используете .filter
правильно. .filter
ожидает, что переданная им функция вернет значение boolean
. Если возвращается true
, текущий элемент будет сохранен во вновь созданном массиве. Если это false
, текущий элемент будет опущен. Таким образом, вместо попытки удалить элемент из test_arr
с помощью .splice
, используйте .filter
, чтобы решить, что остается, а что удаляется.
Также обратите внимание, что в вашем примере v
ссылается на данный элемент (конкретный объект) в вашем test_array
. Таким образом, вам не нужно указывать индекс 0
вашего объекта, скорее вам нужно получить id
текущего объекта.
var test_arr = [{"name":"qqq", "city":"it","id":"123456"}, {"name":"ggg", "city":"uk","id":"777456"}];
test_arr = test_arr.filter(function(elem) {
return elem.id !== '123456';
});
console.log(test_arr); // [{"name": "ggg", "city": "uk", "id": "777456"}]
Если вы хотите «более чистое» решение, вы можете использовать функцию стрелки с разрушающим назначением :
test_arr = test_arr.filter(({id}) => id !== '123456'); // [{"name": "ggg", "city": "uk", "id": "777456"}]
var test_arr = [{"name":"qqq", "city":"it","id":"123456"}, {"name":"ggg", "city":"uk","id":"777456"}];
test_arr = test_arr.filter(({id}) => id !== '123456'); // [{"name": "ggg", "city": "uk", "id": "777456"}]
console.log(test_arr);